我正在扩展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;发布于 2016-04-06 13:50:25
我知道这可能来得太晚了两年--但我正在为同样的问题寻找答案,并认为这对未来的某些人会有用。
看看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托管的,自动装配可以工作了!
发布于 2014-01-14 21:43:10
Spring 永远不会将@Autowired目标保留为null (除非注入的是null )。这应该告诉您,如果Spring域是null,那么@Autowired与它无关。
这里似乎就是这种情况。通过提供如下内容
<entry key="hibernate.ejb.interceptor" value="com.net.filter.AuditInterceptor"/>我相信您是在告诉Hibernate自己创建该实例,因此它不会是Spring托管bean。
如果您发布了bean定义的其余部分,因为我不知道您试图注入到哪个bean中,那么可能会有其他选择。
https://stackoverflow.com/questions/21114164
复制相似问题