• 第五篇文章: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更好理解)

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

  • 相关阅读:
    centos / oracle Linux 常用运维命令讲解
    MySQL(三)基本的SELECT语句
    Vue生命周期
    v-model
    E4A安卓app制作——初识易安卓(一)
    【mq】从零开始实现 mq-03-引入 broker 中间人
    7.Gin 路由详解 - 路由分组 - 路由文件抽离
    Linq-20220817更新
    Burp Suite--Get acquainted for the first time
    永磁体的温度稳定性:剩磁温度系数、矫顽力温度系数、可逆温度系数
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/126948467