我在几个论坛中遇到了“托管bean”和“支持bean”的术语。很多人认为两者都是一样的。但是,似乎有一点点差异。任何人都可以帮助我理解这两个术语之间的确切区别吗?
答案 0 :(得分:63)
更改我的初步答案 - 两者之间没有任何有意义的区别。 tutorial表示后续bean后来被声明为托管bean。所以,总结一下:
我从来没有真正使用过“支持bean”这个词,因为我觉得没用。所以你最好只使用“托管bean”。请注意,在JSF 2.0(和CDI)中,您有@ManagedBean
- 因此您的bean是托管bean。
BalusC建议“支持bean”是定义,“托管bean”是实例。虽然这可能是JSF创作者的最初想法,但我认为不值得支持它。例如,CDI和spring没有“bean定义”和“bean实例”的不同术语。
JSF 2.0规范仅提及术语“支持bean”几次,没有任何定义。除此之外,它提到“支持bean类”,这可能意味着“支持bean”!=“支持bean类”,这带来了进一步的混乱。
总而言之 - 对我而言,两者都是可以互换的,我坚持只使用“托管bean”
答案 1 :(得分:16)
什么是Managed Bean?
由JSF实现管理的JavaBean对象称为托管bean。 托管bean描述了如何创建和管理bean。 它与bean的功能无关。
什么是支持Bean?
Backing bean是与页面中使用的UI组件关联的JavaBeans组件。 Backing-bean管理将UI组件对象的定义与执行特定于应用程序的处理和保存数据的对象分开。 辅助bean定义与页面上使用的UI组件关联的属性和处理逻辑。 每个backing-bean属性都绑定到组件实例或其值。 Backing bean还定义了一组为组件执行功能的方法,例如验证组件的数据,处理组件触发的事件以及在组件激活时执行与导航相关的处理。
Backing Bean和Managed Bean之间有什么区别?
Backing Beans只是一种惯例,是JSF Managed Beans的一种子类型,具有非常特殊的用途。 Backing Bean没有什么特别之处,除了它的使用外,它与其他任何托管bean都不同。
MB :托管Bean; BB :支持Bean
1) BB :支持bean是表单引用的任何bean。
MB :托管bean是一个已经向JSF注册的支持bean(在faces-config.xml中),并且在需要时由JSF自动创建(并可选择初始化)。 / p>
托管bean的优点是JSF框架将自动创建这些bean,可选择使用您在faces-config.xml中指定的参数初始化它们。
2) BB :只应在请求范围
中定义支持BeanMB :由JSF创建的托管bean可以存储在请求,会话或应用程序范围中。
Backing Beans应该在请求范围内定义,与特定页面以一对一的关系存在,并保存所有页面特定的事件处理代码。 在实际场景中,几个页面可能需要在幕后共享相同的支持bean。 支持bean不仅包含视图数据,还包含与该数据相关的行为。
答案 2 :(得分:10)
Backing Bean是与JSF UI绑定的任何bean。托管bean是任何bean
答案 3 :(得分:8)
简单地说,
您作为开发人员:
@ManagedBean(name="managedBean")
@RequestScoped
public class BackingBean {
// ...
}
作为bean管理框架的JSF在幕后负责:
BackingBean managedBean = new BackingBean();
externalContext.getRequestMap().put("managedBean", managedBean);
因此,支持bean是由您开发并通常绑定到视图的具体类,托管bean是具体实例,它由bean管理框架创建并置于所需范围内。按需提供,由EL #{managedBean}
提供。您永远不需要自己创建并将其放入范围。如果你这样做,那么就没有框架管理的bean。
CDI @Named
和Spring @Component
基本上与JSF @ManagedBean
完全相同。
要了解有关如何在JSF,CDI和Spring等bean管理框架中查找和创建托管bean的更多信息,以下问题排查工具应提供深入的洞察力:Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable。
答案 4 :(得分:4)
http://docs.oracle.com/javaee/5/tutorial/doc/bnaqm.html说
典型的JavaServer Faces应用程序包括一个或多个支持bean,每个支持bean都是一个JavaServer Faces托管bean,它与特定页面中使用的UI组件相关联。托管bean是可以使用托管bean工具配置的JavaBeans组件(请参阅JavaBeans组件),配置Bean中对此进行了描述。本节介绍在应用程序中创建,配置和使用支持bean的基本概念。
http://docs.oracle.com/javaee/6/tutorial/doc/bnaqm.html没有提及“支持bean”。
答案 5 :(得分:2)
托管豆由容器管理(实例化和销毁)。
Backing Beans 是将视图作为数据模型进行备份的托管bean。
答案 6 :(得分:1)
我想说支持bean是一个严格用于UI目的的bean,即在jsp文件中引用。毕竟,由JSF容器管理的所有bean都是托管bean,但是有不同的上下文可以使用它们。有关详情,请参阅此处接受的答案:JSF : ManagedBean, Good place to deal with Business Logic?
答案 7 :(得分:-1)
Backing Bean是一种Managed Bean。 Managed Bean是一个Object(即一个Class的实例),由一个容器创建(这就是为什么它被称为托管),当然Object有一个Class,如果你觉得它,你可以创建该类的任意数量的实例无论他们有什么注释m = new MyManagedBean(),它只是一个Not-So-Managed-Bean,或者至少不是由容器管理,而是由你管理:)
支持bean是一种托管bean(正如Santosh所说:一种约定),通常使用JSF requestScope(但在某些框架中,如ADF,甚至只有一个指定的范围用于支持名为backingBeanScope的bean - 你会有从来没有猜到)。
是的... jsf托管bean的味道,人们会调用BackingBeans来绑定UIComponents并编写ActionListeners,而让我们说“模型bean”的味道会在会话范围内,例如并保存你的数据
答案 8 :(得分:-1)
我参加了一个非常好的(昂贵的)JSF课程。我在那里学到的只是http://www.avromroyfaderman.com/2008/07/from-backing-bean-to-managed-bean/中解释的内容。
也许这种差异不是术语的理论差异或词源,但它肯定是一种非常实用的方式来设置您的架构,特别是如果您是一个拥有多个开发人员和/或需要维护的大型项目的一部分很长一段时间都有很多代码。基本上,您的想法是将UI业务逻辑放在托管Bean中。支持bean很稀疏,只支持页面本身。
答案 9 :(得分:-1)
托管Bean:
Managed Bean是在JSF中注册的常规Java Bean类。换句话说,Managed Beans是一个由JSF框架管理的java bean。
从此链接Creating and Using a Backing Bean for a Web Page :
支持Bean:
在JSF中,支持bean是JavaBeans,主要用于提供UI逻辑以及管理Web层和应用程序业务层之间的数据(类似于数据传输对象)。通常,每个JSF页面都有一个支持bean。 backing bean包含页面上使用的UI组件的逻辑和属性。
<强> NB:强>
要使应用程序启动时可用的辅助bean,您就可以了 将其注册为具有名称和范围的托管bean
答案 10 :(得分:-2)
托管Bean:
托管bean是一个已经使用JSF(faces-config.xml)或使用Annotations注册的支持bean。在需要时,JSF会自动创建(并可选择初始化)Managed Bean。
如果在应用程序中使用Managed Bean,则必须在JSF页面中使用以下语法来设置或获取表单bean的值
<h:inputText value="#{user.name}"/>
支持Bean:
包含Web表单的部分或全部组件对象的bean。这种bean被称为Web表单的支持bean。
使用支持bean时,需要连接上面的组件 形成那些关于豆子的人。您为此目的使用绑定属性
示例:
<h:inputText binding="#{myForm.myComponent}" .../>
观察我们如何获取或设置Backing bean的值。
Backing Beans应该在请求范围内定义,与特定页面以一对一的关系存在,并保存所有页面特定的事件处理代码
希望对某人有用。