簡體   English   中英

自動連接到休眠攔截器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM