请您建议我,我如何能够很好地为Hibernate实体启用Spring自动装配?
假设我有一个实体,并希望在那里有邮件发件人:
@Entity
public class EmailActivity extends Activity {
@Autowired @Transient
private JavaMailSender javaMailSender;
...
}
有没有比做
更好的方法AutowireCapableBeanFactory.autowireBean(
getCurrentSession().get(Activity.class, id)
);
在我的DAO中?
谢谢!
答案 0 :(得分:9)
有可能! (这是Spring Roo的默认样式!)
您需要的只是将@Configurable注释添加到您的实体。在配置<context:spring-configured/>
中激活注释并使用AspectJ编织。
Spring Reference中有一章:7.8.1 Using AspectJ to dependency inject domain objects with Spring
另见:
BTW我强烈建议尽可能使用AspectJ编译时编织。
答案 1 :(得分:2)
我这样做的方法是使用AutowiredAnnotationBeanPostProcessor。
在你的实体的构造函数中,你要求AutowiredAnnotationBeanPostProcessor注入“this”。
我在this article末尾的评论详述了这项技术。本文讨论了一种自动装配Hibernate实体的类似方法。
答案 2 :(得分:2)
似乎有一种比使用aspectj-weaving更好的方法,即使用this post中解释的休眠LoadEventListener
。