首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动连接到hibernate Interceptor

自动连接到hibernate Interceptor
EN

Stack Overflow用户
提问于 2014-01-14 20:57:35
回答 2查看 2.3K关注 0票数 3

我正在扩展hibernate.EmptyInterceptor,在我的实现中,我希望自动连接到一些服务,但它们返回null。我在类上添加了@Component注释。我的代码:

代码语言:javascript
复制
<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>

还有这个类:

代码语言:javascript
复制
@SuppressWarnings("serial")
@Component
public class AuditInterceptor extends EmptyInterceptor {

    @Autowired
    private IUserSessionService userSessionService;
EN

回答 2

Stack Overflow用户

发布于 2016-04-06 13:50:25

我知道这可能来得太晚了两年--但我正在为同样的问题寻找答案,并认为这对未来的某些人会有用。

看看Hibernate代码,如果你给出了类名,Hibernate会实例化拦截器的一个新实例,但如果你传入一个bean实例引用,它就会使用它。

所以

代码语言:javascript
复制
<bean id="myInterceptor" class="com.net.filter.AuditInterceptor" />

..。

代码语言:javascript
复制
<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托管的,自动装配可以工作了!

票数 4
EN

Stack Overflow用户

发布于 2014-01-14 21:43:10

Spring 永远不会将@Autowired目标保留为null (除非注入的是null )。这应该告诉您,如果Spring域是null,那么@Autowired与它无关。

这里似乎就是这种情况。通过提供如下内容

代码语言:javascript
复制
<entry key="hibernate.ejb.interceptor" value="com.net.filter.AuditInterceptor"/>

我相信您是在告诉Hibernate自己创建该实例,因此它不会是Spring托管bean。

如果您发布了bean定义的其余部分,因为我不知道您试图注入到哪个bean中,那么可能会有其他选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21114164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档