Код для интерфейсов, а не реализаций.
public interface LDAPConnectionSource {
LDAPConnection getLDAPConnection();
}
Используйте Spring Profiles, чтобы определить, какую реализацию вы хотите запустить во время выполнения.
@Service
@Profile("integration")
public class LdapInMem implements LDAPConnectionSource
{
InMemoryDirectoryServer server;
@PostConstruct
public void startInMemLdapServer() throws UnknownHostException
{
//some in memory listener config
}
public LDAPConnection getLDAPConnection() {
return server.getConnection(); // or what ever returns a LDAPConnection
}
}
без учета интегральных испытаний
@Service
@Profile("!integration")
public class LDAPService
{
@Autowired
private LDAPServerConfig ldapServerConfig;
private LDAPConnection ldapConnection;
public LDAPConnection getLDAPConnection()
{
//some server config from ldapServerConfig
return ldapConnection;
}
}
Клиент просто AutoWires интерфейс:
public class LDAPConnectionClient {
@Autowired
LDAPConnectionSource source;
public void doLDAPStuff() {
LDAPConnection ldapConnection = source.getLDAPConnection();
//do stuff with the connection
}
}
Некоторые другие аспекты, которые следует учитывать при реализации. LDAPConnection
поток безопасен? Если нет, вам, вероятно, потребуется реализовать пул соединений.