当前位置:   article > 正文

Spring AOP——后置通知_spring aop中用于定义后置通知的是什么

spring aop中用于定义后置通知的是什么

一:后置通知

1.后置通知是在连接点完成之后执行的,即连接点返回结果或者抛出异常的时候,下面的后置通知记录了方法的终止

2.一个切面可以包括一个或者多个通知

二:代码实现

1.后置通知方法

  1. package com.dhx.spring.aop.impl;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import org.aspectj.lang.JoinPoint;
  5. import org.aspectj.lang.annotation.After;
  6. import org.aspectj.lang.annotation.Aspect;
  7. import org.aspectj.lang.annotation.Before;
  8. import org.springframework.stereotype.Component;
  9. //把这个类声明为一个切面:需要把该类放到IOC容器中,再声明为一个切面
  10. @Aspect
  11. @Component
  12. public class LoggingAspect {
  13. //声明该方法是一个前置通知:在目标方法开始之前执行,其中*为具体的某个方法名,也可以指全部的方法名
  14. @Before("execution(public int com.dhx.spring.aop.impl.ArtithmeticCalculatorImpl.*(int, int))")
  15. public void beforeMethod(JoinPoint joinPoint) {
  16. //方法名
  17. String methodName=joinPoint.getSignature().getName();
  18. //参数
  19. List<Object> args=Arrays.asList(joinPoint.getArgs());
  20. System.out.println("the method "+methodName+" begins with "+args);
  21. }
  22. //后置通知:在目标方法执行后(无论是否发生异常),执行的通知
  23. //在后置通知中还不能访问目标方法执行的结果
  24. @After("execution(public int com.dhx.spring.aop.impl.ArtithmeticCalculatorImpl.*(int, int))")
  25. public void afterMethod(JoinPoint joinPoint) {
  26. //方法名
  27. String methodName=joinPoint.getSignature().getName();
  28. System.out.println("the method "+methodName+" ends");
  29. }
  30. }

2.测试

  1. package com.dhx.spring.aop.impl;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. public class Main {
  5. public static void main(String[] args) {
  6. //1.创建spring 的IOC容器
  7. ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
  8. //2.从IOC容器中获取Bean的实例
  9. ArtithmeticCalculator artithmeticCalculator=ctx.getBean(ArtithmeticCalculator.class);
  10. //3.使用Bean
  11. int result=artithmeticCalculator.add(3, 6);
  12. System.out.println("result: "+result);
  13. result=artithmeticCalculator.div(12, 6);
  14. System.out.println("result: "+result);
  15. }
  16. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/674989
推荐阅读
相关标签
  

闽ICP备14008679号