JSF中的托管bean

时间:2012-01-07 17:11:00

标签: java jsf java-ee

我正在阅读JSF,我对托管bean有疑问。是"管理"仅指JSF实现实例化和管理其生命周期的事实?现在新的事情是使用CDI,它是一个处理实例化及其生命周期的不同实现?这是托管的意思吗?

CDI是一个能够实例化bean并在JSF之外管理它们的实现,这就是为什么它更好?如果是这样,之前JSF之外的选项是什么?每个容器或实现都有自己管理bean的方法吗? CDI是统一这个的东西吗?

1 个答案:

答案 0 :(得分:2)

在JSF2注释之前,在JSF1中,开发人员必须在<managed-bean>中将bean注册为faces-config.xml。 JSF2中仍然存在支持,但它变成了可选项,如果你想覆盖第三方JAR中打包的托管bean的注释,它可能在某些情况下是唯一的方法。

在JSF和CDI之前很久,在plain JSP/Servlet中,开发人员必须通过显式实例化它们并通过

显式地将它们放置在请求,会话或应用程序范围内来手动创建和管理bean本身。
request.setAttribute("requestScopedBean", requestScopedBean);
request.getSession().setAttribute("sessionScopedBean", sessionScopedBean);
getServletContext().setAttribute("applicationScopedBean", applicationScopedBean);

(预先省略了,如果bean不在范围内,那么bean当然只放在范围内,否则它将被重用)

请注意,以上内容正是JSF“幕后”所做的。

然后发明了各种MVC框架,通过在XML文件中或甚至通过注释声明bean来抽象出来。每个MVC框架都有自己的bean管理方式。然后就是Spring,它试​​图通过提供一种独立于框架的方法来统一它。然后是Java EE 6 CDI,它标准化了它。

这一切始终与容器无关。它是特定于框架的。