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



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

 <bean id="mycontroller" class="com.MyController">
    <property name="myService" ref="myService" />

<bean id="myService" class="com.MyService"></bean>

使用 JSF 时如何做同样的事情?我不想为豆子使用两个 IOC 容器,而是将其保留在面部上下文本身中。我见过这样的链接

JSF 2 注入带有 @ManagedProperty 且没有 xml 的 Spring bean/服务

和关于将春豆注入 jsf 豆的问题。他们谈到将 Spring 管理的 bean 注入到 JSF 上下文中。我正在尝试做的事情必须非常简单,但找不到任何相关信息。我是新手,将不胜感激任何帮助。

我想你可能会对"豆子"这个词感到困惑。问题是,你说的"服务"也是春豆,对吧?

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

JSF IoC 容器非常简单,它不允许您配置其生命周期以包括事务管理、AOP 等。这些事情你必须与Spring(或EJB,在Java EE环境中)有关。

因此,当将 JSF 与 Spring 一起使用时,您通常有两种选择:

  1. 要么将 JSF 页面的后备 bean 放在 JSF 容器中,用 @ManagedBean@RequestScoped@ViewScoped 等对它们进行注释;并在属性中注入任何必要的 Spring bean 和 @ManagedProperty(需要 setter)
  2. 或者跳过 JSF 容器,将支持豆和所有其他 bean 一起放在 Spring 容器中,并使用请求/会话的 Spring 作用域,使用 Spring 的注释@Component@Scope("request")@Scope("session")和注入@Autowired@Qualifier等来注释它们。

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

如果你无论如何都想走第二条路线,你也可以为 Spring bean 添加一个视图范围,由 JSF viewMap 支持。

Spring 所说的"服务"在 Java EE 术语中是"EJB"。EJB 在 Java EE Web 配置文件容器(如 Glassfish、JBossAS 和 TomEE)中开箱即用。

要创建无状态的 EJB 服务,只需在类上使用 @Stateless

@Stateless
public class SomeService {
    public void doSomething() {
        // ...
    }
}

要将其注入到 JSF 管理的 Bean 中,只需在要注入的属性上使用 @EJB

@ManagedBean
@ViewScoped
public class SomeController {
    @EJB
    private SomeService service;
}

就是这样。无需吸气剂/设置器。无需 XML 样板。

相关内容

  • 没有找到相关文章