【问题标题】:Spring not injecting DAOs into JSF managed beans with abstract superclassSpring没有将DAO注入到具有抽象超类的JSF托管bean中
【发布时间】:2011-04-12 02:42:19
【问题描述】:

我有一个 JSF 2.0 应用程序并且我正在集成 Spring,因此我可以使用 hibernateTemplate。我已经咨询了有关 JSF 集成的 Spring documentation 并已采取措施进行设置。我所有的 bean 类都扩展了一个名为 SuperBean 的抽象超类。 SuperBean 是理想的注入点,使我不必在 Spring 中声明所有 bean。我希望将其声明为 abstract="true" 并且任何扩展 SuperBean 类的子类 bean 都会注入 dao。在运行时为空。

<bean id="serviceTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
   <property name="transactionManager" ref="transactionManager"/>
   <property name="transactionAttributes">
      <props>
         <prop key="*"/>
      </props>
   </property>
</bean>
<bean id="daoServiceTarget" class="com.example.service.DaoService">
       <property name="mainDAO" ref="mainDAO"/>
    </bean>
    <bean id="daoService" parent="serviceTemplate">
       <property name="target" ref="daoServiceTarget"/>
    </bean>    
    <bean id="superBean" class="com.example.beans.SuperBean" abstract="true">
       <property name="daoService" ref="daoService"/>
    </bean>

我是否可以简单地声明这个超类 SuperBean 并期望 Spring 注入 dao?我不想在 spring 中声明每个 bean 类。

我认为替代选项(从性能角度来看)是不使用 Spring bean,而是将 DAO 声明为 @applicationScoped 并使用 JEE 的 CDI 将它们注入 SuperBean 类。这在性能方面会更好吗?

【问题讨论】:

    标签: java spring jakarta-ee dependency-injection


    【解决方案1】:

    在上面的示例中,serviceTemplate 提供了您想要的示例。注意 parent="serviceTemplate"。你需要做一些类似于那些从 superbean 继承的事情。还有其他选项,但由于您在 serviceTemplate 中有工作代码,这可能是最好的起点。然后阅读here了解更多详情:

    【讨论】:

    • 我添加了 serviceTemplate bean 定义。它只是spring提供的另一个抽象类。我想避免在春天定义每个 bean。我的 SuperBean 类有一个方法 setDaoService(DaoService dao){//set attr}。作为子类的所有 bean 都应该具有 DAO,因为 SubBean 是 SuperBean。这可能吗?
    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2023-03-27
    • 2011-03-25
    • 2011-12-18
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多