1

我有 3 个接口实现,为了实例化其中一个,我需要检查数据库中的参数。我打算用工厂模式来做,但是由于我在我的应用程序的其余部分中使用 JSF 2 依赖注入,我想知道是否有办法做到这一点,是否可以动态地进行依赖注入?我可以以某种方式指出一种方法或某种东西来在每个时刻获取正确的实现吗?对于后端,我使用的是弹簧核心,因此可以使用弹簧上下文来实现这一点。

我对所有东西都使用注释(@Autowired对于 Spring,@ManagedProperty对于 JSF)。

编辑:该项目将部署在 Tomcat 服务器上。

4

1 回答 1

2

我建议你在你的 JSF 项目中使用 CDI,然后你可以使用编程注入。您应该首先将 CDI 限定符添加到您的接口实现中(您基本上将为每个实现创建自定义注释 -教程)。然后你可以使用类似的东西

@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 专家在这里:-)

编辑

根据this answer真的可以在Tomcat上运行CDI。您还会发现一些类似这样教程。Spring 方法可能是使用AutowireCapableBeanFactor但正如我所说,我不太了解 Spring,所以它只是一个疯狂的猜测:-)

于 2013-04-16T12:42:42.517 回答