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

AspectJ“around”和“proceed”加上“before/after”

牟黎昕
2023-03-14

共有1个答案

许焕
2023-03-14

通过这次测试

@Aspect
public class TestAspect {
    private static boolean runAround = true;

    public static void main(String[] args) {
        new TestAspect().hello();
        runAround = false;
        new TestAspect().hello();
    }

    public void hello() {
        System.err.println("in hello");
    }

    @After("execution(void aspects.TestAspect.hello())")
    public void afterHello(JoinPoint joinPoint) {
        System.err.println("after " + joinPoint);
    }

    @Around("execution(void aspects.TestAspect.hello())")
    public void aroundHello(ProceedingJoinPoint joinPoint) throws Throwable {
        System.err.println("in around before " + joinPoint);
        if (runAround) {
            joinPoint.proceed();
        }
        System.err.println("in around after " + joinPoint);
    }

    @Before("execution(void aspects.TestAspect.hello())")
    public void beforeHello(JoinPoint joinPoint) {
        System.err.println("before " + joinPoint);
    }
}

我有以下输出

  1. 在执行前(void aspects.testaspect.hello())
  2. 执行前(void aspects.testaspect.hello())
  3. 在Hello中
  4. 执行后(void aspects.testaspect.hello())
  5. 执行后(void aspects.testaspect.hello())
  6. 在执行前(void aspects.testaspect.hello())
  7. 执行后(void aspects.testaspect.hello())
 类似资料:
  • 本文向大家介绍基于spring AOP @Around @Before @After的区别说明,包括了基于spring AOP @Around @Before @After的区别说明的使用技巧和注意事项,需要的朋友参考一下 此段小代码演示了spring aop中@Around @Before @After三个注解的区别 @Before是在所拦截方法执行之前执行一段逻辑。 @After 是在所拦截方

  • 本文向大家介绍聊聊Spring AOP @Before @Around @After等advice的执行顺序,包括了聊聊Spring AOP @Before @Around @After等advice的执行顺序的使用技巧和注意事项,需要的朋友参考一下 用过spring框架进行开发的人,多多少少会使用过它的AOP功能,都知道有@Before、@Around和@After等advice。 最近,为了实

  • 我将使用Spring AOP和AspectJ加载时编织来度量代码中特定的私有/受保护/公共方法的执行时间。 为此,我编写了以下注解,其中一个注解将对应该测量执行时间的方法进行注解: 我还写了以下几个方面: 我的Spring配置如下: 我还在项目的目录中放置了以下: 此外,我还向POM添加了以下Spring AOP和/或AspectJ特定的依赖项: null 对于带注释的public和protect

  • 问题内容: 我有 我的问题是:mySetup,testMy和myTeardown是否都将在同一事务中运行?似乎他们应该这样做,但是我遇到了一个奇怪的错误,这可能表明他们正在互相踩踏。 问题答案: 是的,这三种方法将在同一事务中运行。请参阅参考文档中的TestContext Framework /事务管理 部分: 在 事务 内 执行任何before方法(例如,用JUnit的@Before注释的方法)

  • around 是一个权限管理解决方案,它基于 springboot 实现,遵循阿里 java 开发手册,代码实现相对于 springmvc 来说更加优雅。缓存可以不基于任何缓存复杂臃肿的缓存系统,但是简单的实现了自带的 redis 缓存。在配置里可以关闭,也可以自定义任何缓存系统,来实现你心目中的样子。权限模块是实现了 springframework 的 HandlerInterceptor 这个

  • 我试图截取带注释方法的执行,以记录执行时间;因此,我创建了一个新注释: 我将注释应用于我想要跟踪的方法(该方法的类没有注释,如@Service或@Component;这是一个问题吗?) 然后我创建类和@周围方法: 我在pom中添加了spring boot starter aop依赖项,并在主类中添加了@EnableSpectProxy(带@SpringBootApplication注释的类)。我希