如何在不使用Spring IOC的情况下在JSF托管bean中注入服务

Rag*_*hav 0 jsf spring dependency-injection

通常,如果我必须在Spring中注入服务,我会使用

 <bean id="mycontroller" class="com.MyController">
    <property name="myService" ref="myService" />
Run Code Online (Sandbox Code Playgroud)

<bean id="myService" class="com.MyService"></bean>
Run Code Online (Sandbox Code Playgroud)

使用JSF时如何做同样的事情?我不想为bean使用两个IOC容器,而是将它保存在faces context本身.我见过像这样的链接

JSF 2使用@ManagedProperty注入Spring bean/service而没有xml

以及将spring bean注入jsf bean的问题.他们谈论将Spring托管bean注入JSF上下文.我想要做的事情必须非常简单,但无法找到任何相关信息.我是新手,将会感激任何帮助.

Eli*_*les 6

我想你可能会对"豆"这个词感到困惑.问题是,你所谈论的"服务"也是一个Spring bean,对吧?

根据您的配置,您可能将它作为一项服务,因为它具有Spring添加的一些附加功能(可能是事务管理).

JSF IoC容器非常简单,它不允许您将其生命周期配置为包括事务管理,AOP等.那些与Spring(或EJB,Java EE环境)有关的事情.

因此,在使用Spring的JSF时,通常有两种选择:

  1. 要么你把后台bean在JSF容器中的JSF页,注解它们@ManagedBean,@RequestScoped,@ViewScoped,等; 并@ManagedProperty在属性中注入任何必要的Spring bean (需要一个setter)
  2. 或跳过JSF容器,把后盾豆在Spring容器中的所有其他人一样,并使用请求/会话的春天范围,与Spring的注解注解它们@Component,@Scope("request"),@Scope("session")并与注射@Autowired,@Qualifier等等.

就个人而言,面对这种选择,我会选择第一选择,因为它会给你带来@ViewScoped一些其他的细节.这是真的,它使用了两个IoC容器但是,那个Java EE应用程序没有?

如果你想要去第二条路线,你也可以为JSF viewMap支持的Spring bean添加一个视图范围.