Автоматически подключен к спящему перехватчику

Я расширяю hibernate.EmptyInterceptor, и в моей реализации я хотел бы иметь автоматическое подключение к некоторым службам, но они возвращают ноль. Я добавил аннотацию @Component над классом. Мой код:


    
        
        
        
        
        
    

и класс:

@SuppressWarnings("serial")
@Component
public class AuditInterceptor extends EmptyInterceptor {

    @Autowired
    private IUserSessionService userSessionService;

Ответы на вопрос(2)

никогда оставить@Autowired цель какnull (Если не указаноnull это то, что вы вводите). Это должно сказать вам, что если@Autowired полеnullТогда Весна не имела к этому никакого отношения.

Похоже, что дело здесь. Предоставляя что-то вроде

<entry key="hibernate.ejb.interceptor" value="com.net.filter.AuditInterceptor">
</entry>

Я верю тебе'повторяет Hibernate создать этот экземпляр сам, и поэтому он выигралбыть бобом, управляемым весной.

Если вы опубликуете остальную часть определения бина, потому что я неЯ не знаю, в какой боб вы пытаетесь ввести, могут быть альтернативы.

 lior15 янв. 2014 г., 10:24
Спасибо за вашу помощь, но я нашел решение в:stackoverflow.com/questions/19217872/...
 lior14 янв. 2014 г., 15:01
я пытаюсь внедрить службу в класс, который я опубликовал. служба (IUserSessionService) является нулевой. этот сервис autowire уже работает в разных бобах.
 Sotirios Delimanolis14 янв. 2014 г., 15:08
@ я или яМне бы хотелось знать, какому бину принадлежат свойства, которые вы разместили выше. Этот бин вместо использования вашего бина AuditInterceptor создает свой собственный, который выигралк весне и, следовательно, победитУ него не было обработано ни одной из целей инъекции.

что, вероятно, это будет на два года позже, но я искал ответ на ту же проблему и подумал, что это будет полезно для кого-то в будущем.

Если посмотреть на код Hibernate, Hibernate создаст экземпляр нового экземпляра перехватчика, если вы дадите имя класса, но если вы передадите ссылку на экземпляр компонента, он будет использовать это.

Так

<bean id="myInterceptor" class="com.net.filter.AuditInterceptor">
</bean>

...

<property name="jpaPropertyMap">
    <map>
        <entry key="javax.persistence.transactionType" value="JTA">
        <entry key="hibernate.current_session_context_class" value="jta">
        <entry key="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup">
        <entry key="hibernate.connection.autocommit" value="false">
        <entry key="hibernate.ejb.interceptor">
            <ref bean="myInterceptor">
        </ref></entry>
    </entry></entry></entry></entry></map>
</property>

Теперь bean-компонент myInterceptor управляется Spring, и автоматическое подключение будет работать!

Ваш ответ на вопрос