Spring:如何动态地实现bean实现?

时间:2015-12-25 10:26:34

标签: java spring

我们说我们有界面:

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(...);
    }
}

问题:
如何正确实施?

1 个答案:

答案 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}}