0

我想在每次加载或持久化我的实体时包装/解包它。我知道我不能使用 JPA 侦听器来做到这一点,因为它们只能对对象执行操作而不能与其他对象交换。自然的解决方案是使用 Aspect。但是有没有我可以切入的特定方法?问题是要包装/展开的实体可以是另一个实体的字段......

编辑:

我发现您不能使用 Spring AOP 执行此操作,因为 EntityManager 不是弹簧管理的(为什么?) - 请参见此处。为了使它工作,我必须明确定义 EntityManager bean,但在那篇文章中不建议这样做 - 再次,为什么?无论如何该怎么做?另一方面,为什么他们说创建的 EntityManager 是应用程序管理的?请参阅弹簧 API 文档

4

1 回答 1

0

尝试切入使用实体类的 getter 和 setter。从 EntityManager 检索实体的方法,实现这一点的最佳方法是创建新注释并覆盖所有可以检索该类实例的方法,然后使用 @annotation 支持切入点:

@annotation - 限制匹配到连接点的主题(在 Spring AOP 中执行的方法)具有给定注释的连接点

此外,要获得修改实体,您可以执行类似的操作。

使用spring aop获取方法参数?

有时您需要在通知正文中访问返回的实际值。您可以使用绑定返回值的@AfterReturning 形式

于 2014-02-02T03:18:35.753 回答