当前位置: 首页 > 知识库问答 >
问题:

AspectJ Spring AOP切入点hibernate实体函数

章建木
2023-03-14

是否有一种方法可以使用spring来指向cut hibernate实体。

这是我发现的,但没有解决办法

共有1个答案

仇建茗
2023-03-14

使用Spring AOP,您无法做到这一点。Spring AOP是一个有限的AOP解决方案,只与AspectJ相似。Spring AOP在许多方面不如AspectJ强大:

  • Spring AOP只支持AspectJ切入点的有限子集(只支持切入点的执行类型)
  • Spring AOP与AspectJ相比具有不同的语义,因为它使用动态代理而不是直接的字节码操作。在Spring AOP使用的基于代理的解决方案中,当控制流没有离开代理对象时,不会执行建议,就像在同一个对象中调用另一个方法时一样,比如this.someothermethod()
  • Spring AOP只适用于Spring托管bean。Hibernate实体不是Spring托管bean,因此Spring AOP不适用于它们。

我鼓励您切换到本机AspectJ,以便能够为Hibernate实体或任何其他非spring托管bean提供建议。Spring很好地支持AspectJ,您应该能够更改配置,使用本机AspectJ而不是Spring AOP。

 类似资料:
  • 我希望在每次加载或持久化实体时包装/展开它。我知道我不能使用JPA监听器来完成这件事,因为它们只能对对象执行一个操作,而不能与其他对象交换它。自然的解决方案是使用方面。但是有没有特别的方法我可以切入呢?问题是要包装/解包装的实体可以是另一个实体的字段...

  • 我创建了一个带有指向带注释方法的切入点的Aspect。我作为得到的是接口中的方法声明,而不是方法实现。所以当我想获取带注释的方法参数时,我必须在接口中而不是在实现中添加注释。 如果方法注释是在方法实现中添加的,则它们没有注释。正确的切入点是什么?

  • 问题内容: 我需要使用AspectJ向每个初始化的对象注入一些方法。 我以为是这样的: 指向对象的切入点初始化,因此我可以将这些方法直接注入到每个其他对象的对象中。 但是,它不起作用。你知道为什么吗?还是另一种方法可以如何100%确保每个初始化的对象都将成为切入点?* .new不适用于String,List等。 谢谢! 问题答案: 用户selig是正确的:您可能不想截取 所有 对象,尤其是JDK

  • 对象的切入点初始化,所以我可以直接将这些方法注入到作为每一个其他对象的一部分的对象中。 然而,它不起作用。你知道为什么吗?或者有什么其他方法可以100%地确保每个初始化的对象都是切入点?*.new不适用于字符串、列表等内容。 谢谢!

  • 我正在使用Spring的AspectJ和CGLIB代理。我有一个定义如下的方面,我希望它在具体的类上为公共方法提供建议,这些类是用批注“validatormethod”批注的:

  • 我有一个Hibernate实体,,它工作正常: 我想确定此对象何时更改并在我的应用程序中更新一些。我能想到的最简单的方法是扩展并覆盖setter: 这在我的应用程序中工作得很好,但是当我开始持久化实体时,Hibernate抱怨它不知道什么是< code>ExtendedEvent。 我可以看出扩展Hibernate实体是一个不小的问题,尤其是当您开始添加字段时——但是我所希望的是Hibernate