我们说我们有界面:
public interface IAuthentication { }
和两个实现:
public class LdapAuthentication implements IAuthentication {}
public class DbAuthentication implements IAuthentication {}
最后我们有一个负责处理身份验证的bean。这个bean应该使用上面显示的一个实现(基于例如db中指定的配置)。
@Service
public class AuthenticationService {
public boolean authenticate(...) {
boolean useDb = ...; //got from db
//my problem here
//how to get right implementation: either LdapAuthentication or DbAuthentication?
IAuthentication auth = ...;
return auth.authenticate(...);
}
}
问题:
如何正确实施?
答案 0 :(得分:4)
如果参数值没有改变:
@Service
public class AuthenticationService {
@Autowired
private ApplicationContext сontext;
public boolean authenticate(...) {
boolean useDb = ...; //got from db
IAuthentication auth = context.getBean(useDb ? DbAuthentication.class : LdapAuthentication.class);
return auth.authenticate(...);
}
}
如果参数是动态的
{{1}}