[英]Autowired to hibernate Interceptor
我正在擴展hibernate.EmptyInterceptor,在我的實現中,我希望自動連接到某些服務,但它們返回null。 我在類上添加了一個@Component注釋。 我的代碼:
<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" value="com.net.filter.AuditInterceptor"/>
</map>
</property>
和班級:
@SuppressWarnings("serial")
@Component
public class AuditInterceptor extends EmptyInterceptor {
@Autowired
private IUserSessionService userSessionService;
我知道這可能要來兩年太晚了 - 但我正在尋找同樣問題的答案,並認為這對未來的某些人有用。
查看Hibernate代碼看起來如果給出類名,Hibernate將實例化攔截器的新實例,但如果傳入bean實例引用,它將使用它。
所以
<bean id="myInterceptor" class="com.net.filter.AuditInterceptor" />
...
<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" />
</entry>
</map>
</property>
現在bean myInterceptor是Spring管理的,自動裝配將工作!
Spring 永遠不會將@Autowired
目標保留為null
(除非null
是你注入的)。 這應該告訴你,如果@Autowired
字段為null
,那么Spring與它無關。
這似乎就是這種情況。 通過提供類似的東西
<entry key="hibernate.ejb.interceptor" value="com.net.filter.AuditInterceptor"/>
我相信你告訴Hibernate創建該實例本身,因此它不會是一個Spring托管bean。
如果你發布剩下的bean定義,因為我不知道你想要注入什么bean,可能有其他選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.