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

Spring AOP-未调用点剪切

司寇高洁
2023-03-14
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Track {

}

我没有错过我的包的@Configuration类中的@EnableAspectJAutoProxy。

我在下面的方面中定义了一个切入点和一个建议:

@Aspect
@Component
public class MyAspect {

@Pointcut("execution(@Track * *.*(..))")
void annotatedMethod() {
    // No Implementation required
}

@Around("annotatedMethod() && @annotation(methodLevelTrack)")
public void adviseAnnotatedMethods(ProceedingJoinPoint proceedingJoinPoint,
        Track methodLevelTrack) throws Throwable {

     // do some task
    proceedingJoinPoint.proceed();
    // do some task after the method is executed.
  }
}

我的意图是:对于任何包中的任何方法(用@track注释)、任何访问修饰符、任何数量的输入参数和任何返回类型,都要遵循方面的@around建议。

public class Engine {
  // bunch of other autowired objects

 public void processTask() {
   <autowired_object_A>.someMethod() // this method has been annotated with @Track
   <autowired_object_B>.someMethod() // this method has also been annotated with @ Track
   .... // bunch of other methods in other autowired objects that have been annotated with @ Track

   someMethodOfEngineClass(); // Now this has been defined in the Engine class as below, but pointcut doesn't recognize this method!

 }

 @Track
 private void someMethodOfEngineClass() {
  // do something
 }
}

共有1个答案

东郭阳德
2023-03-14

当您定义aop时,spring会在类周围创建proxy,所以当调用方法时,实际上call会委托给proxy,类似于

your.package.Engine$$FastClassBySpringCGLIB$$c82923b4.someMethodOfEngineClass()

但这仅在从类外部调用方法时有效,如果从同一个类调用class method,则实际上是通过this.SomeMethodoFengineClass()调用它

在这里->http://www.nurkiewicz.com/2011/10/spring-pitfalls-proxying.html您可以找到更多关于代理的信息

 类似资料:
  • 主要内容:读者,前提条件,Spring AOP 概述Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。 读者 本教程主要是为Spring 面向方面编程(AOP)初学者准备的,帮助他们了解与Spring的AOP框架相关的基础到高级概念。 前提条件 在开始练习本教程系列文章中给出的各种类型的示例之前,我们假设您已经了解

  • 裁剪节点 成员变量 变量 类型 名称 备注 clipRegion number 裁剪区域 无 enableClip boolean 是否开启裁剪 默认true 方法 构造函数 new BK.ClipRectNode(x,y,w,h) 参数 类型 名称 备注 x number 裁剪区域x坐标 y number 裁剪区域y坐标 width number 裁剪区域宽 height number 裁剪区域

  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 我将<code>背景 1.back_xml: 2.瓷砖.xml 现在,我将back.xml设置为< code >背景以< code>LinearLayout工作正常。 我需要有一个圆角,以及它的边框。但是我只有圆角的边框,而不是图像,我的代码中有什么问题吗? 这是我的照片:

  • 裁剪节点 成员变量 变量 类型 名称 备注 clipRegion number 裁剪区域 无 enableClip boolean 是否开启裁剪 默认true 方法 构造函数 new BK.ClipRectNode(x,y,w,h) 参数 类型 名称 备注 x number 裁剪区域x坐标 y number 裁剪区域y坐标 width number 裁剪区域宽 height number 裁剪区域

  • 当我运行命令我得到以下错误:- 我谷歌了一下,尝试了很多东西,都没有成功。