8

你能告诉我,我怎样才能很好地为 Hibernate 实体启用 Spring 自动装配?

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

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

    ...
}

有没有比做更好的方法

AutowireCapableBeanFactory.autowireBean(
    getCurrentSession().get(Activity.class, id)
);

在我的 DAO 中?

谢谢!

4

3 回答 3

9

有可能的!(而且它是 Spring Roo 中的默认样式!)

您需要做的就是将@Configurable 注释添加到您的实体。激活配置中的注释<context:spring-configured/>并使用 AspectJ 编织。

Spring参考中有一个章节:7.8.1 Using AspectJ to dependency injection domain objects with Spring

也可以看看:

顺便说一句,我强烈建议尽可能使用 AspectJ 编译时编织。

于 2011-04-08T12:38:56.027 回答
3

我这样做的方法是使用 AutowiredAnnotationBeanPostProcessor。

在实体的构造函数中,您要求 AutowiredAnnotationBeanPostProcessor 注入“this”。

我在本文末尾的评论详细介绍了该技术。这篇文章讨论了一种类似的自动装配 Hibernate 实体的方法。

于 2011-04-08T13:41:46.370 回答
2

似乎有比使用 aspectj-weaving 更好的方法,即使用 hibernate ,在这篇文章LoadEventListener中进行了解释。

于 2012-03-12T13:42:24.367 回答