Spring не внедряет DAO в управляемые компоненты JSF с абстрактным суперклассом - PullRequest
1 голос
/ 12 апреля 2011

У меня есть приложение JSF 2.0, и я интегрирую Spring, чтобы я мог использовать hibernateTemplate.Я уже ознакомился с документацией Spring по интеграции JSF и предпринял шаги для ее настройки.Все мои классы бобов расширяют абстрактный суперкласс SuperBean.SuperBean - желаемая точка инъекции, избавляющая меня от необходимости объявлять все мои бины весной.Я надеялся просто объявить его как abstract = "true", и любой боб подкласса, расширяющий класс SuperBean, мог бы внедрить дао.Во время выполнения он равен нулю.

<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-бины, а объявлять DAO как @applicationScoped и вставлять ихкласс SuperBean, использующий CDI JEE.Будет ли это лучше с точки зрения производительности?

1 Ответ

1 голос
/ 12 апреля 2011

В приведенном выше примере выглядит, что serviceTemplate предоставляет пример того, что вы хотите. Обратите внимание на parent = "serviceTemplate". Вам нужно сделать что-то похожее на тех, кто наследует от бобов. Существуют и другие варианты, но, поскольку у вас есть рабочий код в serviceTemplate, это может быть лучшим началом Затем прочитайте здесь для более подробной информации:

...