如果我编写@managed bean 注释并在faces-config.xml 中定义相同的bean 是否会有两个实例

mdp*_*mdp 2 faces-config jsf-2 managed-bean

在我的应用程序中,我们在某些地方使用 @ManagedBean 注释对 Person bean 和我们在 faces-confing.xml 中定义的同一个 Person bean 同时使用,如下所示。

@ManagedBean("name=person")
 @SessionScoped
 Public class Person{


}
Run Code Online (Sandbox Code Playgroud)

人脸配置文件

<managed-bean>
     <managed-bean-name>person</managed-bean-name>
     <managed-bean-class>com.test.sample.Person</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)

我的问题是这种方法是否为 Person bean 创建了两个实例,或者如果我这样做很重要?如果我对应用程序中的每个 Bean 都这样做,这对我的应用程序的性能有什么影响吗?

Fri*_*itz 5

为这种情况定义了一个优先级。@ManagedBeanannotation 避免了必须在其中配置条目,faces-config.xml但是,如果您同时拥有这两个<managed-bean>条目,则该条目会覆盖 annotation。

在您的情况下,只有一个实例配置为您的faces-config.xml条目。在您的情况下,两种方法的配置方式相同,但是,如果您将faces-config.xml条目更改为类似

<managed-bean>
     <managed-bean-name>personBean</managed-bean-name>
     <managed-bean-class>com.test.sample.Person</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)

您的 bean 将注册在personBean而不是person(这是注释定义的名称)下。