2012-01-07 139 views
2

我正在阅读JSF,并且有一个关于托管bean的问题。 “托管”只是指JSF实现实例化并管理其生命周期这一事实吗?现在的新事物是使用CDI,它是处理实例化及其生命周期的不同实现?这是什么意思管理?JSF中的托管bean

CDI是一个能够实例化bean并在JSF之外管理它们的实现,这就是为什么它更好吗?如果是这样,以前JSF以外的选择是什么?每个容器或实现是否都有自己的管理bean的方式?而CDI是结合了这一点的东西?

+1

这里有一个很好的答案,我认为会帮助你 - http://stackoverflow.com/questions/2930889/are-managedbeans-obsolete-in-javaee6-because-of-named-in-cdi-weld。 – Perception 2012-01-07 17:17:00

+0

@Perception嗨,谢谢。它几乎回答了我的问题,但仍有一个问题:如果'@ ManagedBean'是一个注释,说实施需要处理它(并且这只适用于支持视图的bean),那么你对bean做了什么?在业务层?有没有可能将这个责任留给EJB容器? – LuckyLuke 2012-01-07 20:19:54

回答

2

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

JSF和CDI不久,在plain JSP/Servlet,开发人员必须手动创建并通过显式实例化他们,并明确

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将其标准化。

这一切都是独立于容器的。它是特定于框架的。