에서 같은 클래스의 조성물은 내가 GitHub의에 코드 조각 다음 발견 :상속 및 Java
public class DummySSLSocketFactory extends SSLSocketFactory {
private static final Logger LOG = LoggerFactory.getLogger(DummySSLSocketFactory.class);
private SSLSocketFactory factory;
public DummySSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = new TrustManager[] {new DummyTrustManager()};
sslContext.init(null, trustManagers, new java.security.SecureRandom());
factory = sslContext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeCamelException("Error creating DummySSLSocketFactory: " + e.getMessage(), e);
}
}
/**
* Must provide this getDefault operation for JavaMail to be able to use this factory.
*/
public static SocketFactory getDefault() {
LOG.warn("Camel is using DummySSLSocketFactory as SSLSocketFactory (only to be used for testing purpose)");
return new DummySSLSocketFactory();
}
public String[] getDefaultCipherSuites() {
return factory.getDefaultCipherSuites();
}
public String[] getSupportedCipherSuites() {
return factory.getSupportedCipherSuites();
}
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException {
return factory.createSocket(socket, host, port, autoClose);
}
public Socket createSocket(String host, int port) throws IOException {
return factory.createSocket(host, port);
}
public Socket createSocket(String host, int port, InetAddress localAddress, int localPort)
throws IOException {
return factory.createSocket(host, port, localAddress, localPort);
}
public Socket createSocket(InetAddress host, int port) throws IOException {
return factory.createSocket(host, port);
}
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)
throws IOException {
return factory.createSocket(address, port, localAddress, localPort);
}
public Socket createSocket() throws IOException {
// must have this createSocket method
return factory.createSocket();
}
}
유사 구현은 널리 다른 프로젝트에서 사용된다. 나는 상속과 구성을 동시에 사용하는 목적이 무엇인지 알아 내려고 노력했다. sslContext.getSocketFactory();
의 결과를 반환하는 팩토리 메서드를 사용하는 것만으로도 클래스를 확장하지 않아도 충분할 것으로 보입니다. 이 코드를 쓴 사람의 정확한 의도했지만, 수업이 조직에 분명하다 모르는
액세스 가능한 생성자가있는 클래스가 필요한 리플렉션 기반 프레임 워크를 사용하고 있거나 일부 클래스에 대해 'SSLSocketFactory'의 사용자 지정 하위 클래스를 명시 적으로 만들어야하기 때문에 팩터 리 메서드를 사용할 수 없을 수도 있습니다. 이유. 또는 각 메소드에 로깅 기능을 추가하려고하지만 클래스 구현을 완료하지 않은 것일 수도 있습니다. 이 특별한 경우에는 확실하지 않습니다. –