Spring没有将dao注入到具有抽象超类的JSF托管bean中



我有一个JSF 2.0应用程序,我正在集成Spring,以便可以使用hibernateTemplate。我已经查阅了有关JSF集成的Spring文档,并采取了一些步骤来进行设置。我的所有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吗?我不希望在春天必须声明每个bean类。

我认为另一种选择(从性能角度来看)是不使用Spring bean,而是将DAO声明为@applicationScoped,并使用JEE的CDI将它们注入到SuperBean类中。这是否会带来更好的性能?

在上面的例子中,serviceTemplate提供了一个你想要的例子。注意parent="serviceTemplate"。你需要做一些类似于继承superbean的事情。还有其他的选择,但是因为你在serviceTemplate中有工作代码,所以这可能是最好的开始。

最新更新