目录
抽取通用逻辑。
1) 定义切入点;2) 选择合适的切入方法。
范例(源自参考文章):注意代码中的注释
- //@1:这个类需要使用@Aspect进行标注
- @Aspect
- public class Aspect1 {
-
- //@2:定义了一个切入点,可以匹配Service1中所有方法
- @Pointcut("execution(* com.javacode2018.aop.demo9.test1.Service1.*(..))")
- public void pointcut1() {
- }
-
- //@3:定义了一个前置通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
- @Before(value = "pointcut1()")
- public void before(JoinPoint joinPoint) {
- //输出连接点的信息
- System.out.println("前置通知," + joinPoint);
- }
-
- //@4:定义了一个异常通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
- @AfterThrowing(value = "pointcut1()", throwing = "e")
- public void afterThrowing(JoinPoint joinPoint, Exception e) {
- //发生异常之后输出异常信息
- System.out.println(joinPoint + ",发生异常:" + e.getMessage());
- }
-
- }
切入点,即能通过@PointCut中的模式字符串匹配到的方法。模式字符串有多种写法,可以分为类使用、方法使用、实例使用三类:
方法使用:
类使用:
对象使用:
@Before
:方法执行前执行
@Around
:方法执行前后执行
@After
:在连接点方法完成之后执行,无论连接点方法执行成功还是出现异常,都将执行后置方法
@AfterRunning
:在方法成功执行返回结果之后执行
@AfterThrowing
:在方法抛错之后执行
参考文章: