• 第五篇文章:AspectJ框架


    spring原生的Aop实现,作为了解就行,不是重点

    重点是Aspect(专门面向切面编程的框架)

    1.Aspect切入点表达式(极其重要)

    execution(访问权限   方法返回值  方法声明(参数) 异常类型)

    简化:

    execution( 方法返回值  方法声明(参数))

     

     第一个before表示 ,在这个包的SomeServiceImpl这个类里面的doSome()方法前面插入myAspect方法,进行日志处理

    为同一个方法绑定多个通知:

     

    2.给切入点表达式起别名:使用@Pointcut注解

     可以看到同一个切入点织入了多个切面,或者说多个切面切入到了同一个切入点

    也就是说某处要加入好几个切面

    这个时候发现execution后面的内容其实都一样,那这样重复写三次就非常麻烦,于是我们给execution后面的内容起一个别名,这样就可以用很短的几个单词代替原先execution后面很长的一串了

    3.通知的类型:

    (1)前置通知

    1. @Aspect//表明这是一个切面类(AspectJ框架能识别出这是一个切面类),这个类里面是切面方法
    2. public class test
    3. {
    4. @Before("execution(public String com.bjpowernode.SomeServiceImpl.doSome(String,int))")
    5. public void Before()
    6. {
    7. System.out.println("前置通知:........");
    8. }
    9. }

     

    如果想在SomeServiceImpl类的所有方法前面都加一个前置通知:

     @Before("execution(public * com.bjpowernode.SomeServiceImpl.*(..))")
      

    返回值类型任意   方法名任意     传入方法的参数的类型也是任意

    (2)后置通知:

    @AfterReturning

    1. @Aspect//表明这是一个切面类(AspectJ框架能识别出这是一个切面类),这个类里面是切面方法
    2. public class test
    3. {
    4. @AfterReturning("execution(public String com.bjpowernode.SomeServiceImpl.doSome(String,int))",returning ="obj")
    5. public void AfterReturning(Object obj)
    6. {
    7. System.out.println("后置通知:........");
    8. }
    9. }

    (3)环绕通知:@Around

    在目标方法前后通知

    (4)@After  最终通知(其实这个关键字换成finally更好理解)

    就是不管目标方法是否正常执行,最重的代码都会被执行

  • 相关阅读:
    5.(vue3.x+vite)封装组件
    Flink学习13:Flink外接kafka数据源
    A40I工控主板(SBC-X40I)LVDS显示屏测试
    5 分钟完成 ZooKeeper 数据迁移
    SpringBoot整合Swagger2
    CCPlotR | 轻松拿捏单细胞分析之细胞交互!~
    Java里使用AspectJ实现AOP
    2023/09/22 制作demo期间心得
    ARM官方推荐的JTAG/SWD接口
    Metabase学习教程:仪表盘-7
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/126948467