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