Jsf 在抽象父类中注入常用的CDIBean

Jsf 在抽象父类中注入常用的CDIBean,jsf,cdi,jsf-2.2,java-ee-7,Jsf,Cdi,Jsf 2.2,Java Ee 7,这是一个更好的实践问题 我们正在JSF2.2中将JSF托管bean转换为CDIBean。在进行此操作时,似乎在很多bean中,我们需要一些sessionscoped bean 我们最初打算@injects,但另一种选择是将它们注入父“FacesBean”类中的受保护变量 这是一种好的做法吗 @Inject是否也适用于尚未转换为CDI的@ManagedBean类 因此,一个接一个: 1) 良好做法 如果您有一个类层次结构,我建议您@将其注入父级中的私有字段,然后创建一个具有最低可见性(可能受保护)

这是一个更好的实践问题

我们正在JSF2.2中将JSF托管bean转换为CDIBean。在进行此操作时,似乎在很多bean中,我们需要一些sessionscoped bean

我们最初打算@injects,但另一种选择是将它们注入父“FacesBean”类中的受保护变量

  • 这是一种好的做法吗
  • @Inject是否也适用于尚未转换为CDI的@ManagedBean类
  • 因此,一个接一个:

    1) 良好做法

    如果您有一个类层次结构,我建议您
    @将其注入父级中的私有字段,然后创建一个具有最低可见性(可能受保护)的getter方法。只需遵循Java封装的一般良好实践规则即可

    2)
    @ManagedBean
    @Inject


    只要您使用bean发现模式
    all
    (使用empty
    beans.xml
    ),您的类将被自动拾取为托管bean-包括那些用
    @ManagedBean
    注释的类。只要它是一粒豆子,注射就起作用。因此,是的,只要类能够自动成为bean,注入就可以工作(例如,它不是
    @被否决的
    或不可验证的等)

    问题是,用getter声明私有注入变量,为开发人员在子类中仍然注入相同的变量打开了大门。然后我们注入两次吗?我不知道注入到一个受保护的字段如何防止开发人员犯完全相同的错误——但是如果你觉得更好,那么就去做吧,它应该会起作用。为了回答上面的问题,您将有两个注入点,因此是的,您将注入两次(但除非它是
    @Dependent
    ,否则实际上您将只注入指向同一bean底层实例的代理对象)。