Hibernate实体autowire

时间:2011-04-08 12:18:19

标签: java hibernate spring autowired

请您建议我,我如何能够很好地为Hibernate实体启用Spring自动装配?

假设我有一个实体,并希望在那里有邮件发件人:

@Entity
public class EmailActivity extends Activity {
    @Autowired @Transient
    private JavaMailSender javaMailSender;

    ...
}

有没有比做

更好的方法
AutowireCapableBeanFactory.autowireBean(
    getCurrentSession().get(Activity.class, id)
);

在我的DAO中?

谢谢!

3 个答案:

答案 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