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

Save方法被拦截,但findAll未被拦截

唐涛
2023-03-14

问题很简单

@Around("execution(* package.*Repository.save(..))")
public Object saveInterupt(ProceedingJoinPoint joinPoint) throws Throwable {
// This gets called whenever repository save is called
}

@Around("execution(* package.*Repository.findAll(..))")
public Object findInterupt(ProceedingJoinPoint joinPoint) throws Throwable {
// This IS NOT GETTING called whenever repository findAll is called
}

在这里打破头!

编辑:一个小突破。我打印了目标,它返回的是SimpleJPrepository,而不是实际的存储库。

共有2个答案

景震博
2023-03-14

你用的是Spring靴吗?Spring BOOT中的Aspecting只在类中的单个方法第一次被调用时调用该通知。如果您希望Spring BOOT在任何情况下都尊重您对任何给定类中的多个方法的@Around建议,那么您需要以bean(SB的@bean)的形式访问该类。。。

Spring BOOT的AOP与使用AspectJ的aspecting不同,主要区别在于AspectJ修改了Spring使用动态代理的字节码。

平庆
2023-03-14

假设存储库是以下结构

public interface JpaEmployeeRepository extends CrudRepository<JpaEmployee, Long> {..}

以下切入点适用于这两种情况

@Around("execution(* org..*Repository.save(..))")

@Around("execution(* org..*Repository.findAll(..))")

如果我正确理解了这个问题,那么要求拦截特定包中特定方法的执行。如果是,可以在此处阅读更多详细信息@包内所有方法的AspectJ切入点

 类似资料:
  • 使用bytepal拦截类Foo,有两种方法A、B 在A方法中,B方法被调用。如果我们在intercetpor类栏中同时删除A和B到C方法,它们在第一行调用 会发生什么?这些方法的执行顺序是什么?

  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 问题内容: 我有这个代码 有什么方法可以在没有子类化或修改类且没有工厂的情况下拦截呼叫? 编辑:抱歉忘了提到这是在Android平台上。 问题答案: 您是否考虑过面向方面的编程,甚至还考虑过AspectJ?有关AspectJ / Android的信息,请参见此处和此处。

  • 拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)

  • 拦截时间 bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数

  • 拦截窗口 bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本