我有3个接口的实现,为了实例化其中一个,我需要检查数据库中的参数。 我打算用工厂模式来做,但由于我在我的应用程序的其余部分使用JSF 2依赖注入,我想知道是否 有办法做到这一点,是否可以通过dinamically进行依赖注入? 我可以用某种方式指出一种方法或某种东西来获取每一刻的正确实施吗? 对于后端我使用的是spring core,因此使用spring上下文的方法可以实现。
我正在为所有内容使用注释(@Autowired
代表Spring,@ManagedProperty
代表JSF)。
编辑:该项目将部署在Tomcat服务器上。
答案 0 :(得分:1)
我建议您在JSF项目中使用CDI,然后可以使用程序化注入。 您应该首先将CDI限定符添加到您的接口实现(您基本上将为每个实现创建自定义注释 - tutorial)。然后你可以使用像
这样的东西@Named //similar to ManagedBean
@RequestScoped
public Bean {
@Inject
@Any
Instance<YourInterface> yourInterface;
public void someMethod() {
if(someCondition) {
InterfaceImpl impl = yourInterface.select(new SomeOfYourQualifiers()).get();
}
}
}
此外,您不必使用Autowired
来支持Inject
。我也确定有一些Spring的方法如何,但我会把它留给一些Spring专家: - )
修改强>
根据这个answer确实可以在Tomcat上运行CDI。您还会找到一些类似one的教程。而Spring方法可能正在使用AutowireCapableBeanFactor但正如我所说,我不太了解Spring,所以它只是一个狂野的猜测: - )