zoukankan      html  css  js  c++  java
  • spring>aop

    推荐文章:
    https://blog.csdn.net/dilixinxixitong2009/article/details/78781851
    https://www.cnblogs.com/jiaweit/p/9986390.html
    关注我下一篇,自定义注解玩aop 老生常谈: 切面: AOP核心概念 1、横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2、切面(aspect) 类是对物体特征的抽象,切面就是对横切关注点的抽象 3、连接点(joinpoint) 被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器 4、切入点(pointcut) 对连接点进行拦截的定义 5、通知(advice) 所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类 6、目标对象 代理的目标对象 7、织入(weave) 将切面应用到目标对象并导致代理对象创建的过程 8、引入(introduction) 在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段 以上是来自推荐文章 个人总结3步: 1,切面 2.切点 3.值入 至于什么通知,对象连接点都是上面三个步骤里面的细节 I》》》》先考虑切面能干什么? a.记录日志 a鉴权 c利用织入处理业务 d设置order级别切换数据源 II》》》切面都知道了,获取切面传值咋搞呢? a @Pointcut("execution(* com.example.demo.controller.*.asserb(..))&&args(index),argNames=index!execution(* com.example.demo.instageconfig.*.asserb(..))") 利用如上使用&&或者||,传入参数&&args(index),argNames=index 为什么这样,老司机不用说,新司机请去看源码 b JoinPoint joinPoint.getArgs()获取入参,注意这里是一个数组 代码案例如下:log.info("前置执行:getArgs:"+ JSON.toJSONString(joinPoint.getArgs())); 2021-06-26 17:25:05.541 INFO 10328 --- [nio-8080-exec-1] c.example.demo.instragedemo.InstrageAop : 前置执行:getArgs:[3],看到没这里是一个数组里面是个3,根据自己的业务去处理 个人案例如下:
    //    JoinPoint joinPoint:
    //    Signature getSignature();	获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息
    //    Object[] getArgs();	获取传入目标方法的参数对象
    //    Object getTarget();	获取被代理的对象
    //    Object getThis();	获取代理对象
    //    补充说明:@Around不要与after,before一起用会有冲突
    
    
    
    //    ProceedingJoinPoint:
    //    ProceedingJoinPoint对象是JoinPoint的子接口,该对象只用在@Around的切面方法中,
    //    添加了
    //    Object proceed() throws Throwable //执行目标方法
    //    Object proceed(Object[] var1) throws Throwable //传入的新的参数去执行目标方法
    
    ProceedingJoinPoint是JoinPoint 子类也是个接口
    ProceedingJoinPoint源码如下:
    package org.aspectj.lang;
    
    import org.aspectj.runtime.internal.AroundClosure;
    
    
    public interface ProceedingJoinPoint extends JoinPoint {
    
      //非牛逼大牛请勿使用
        void set$AroundClosure(AroundClosure arc);
    
    //非牛逼大牛请勿使用
         default void stack$AroundClosure(AroundClosure arc) {
        	 throw new UnsupportedOperationException();
         }
       //此方法是调用目标方法时使用,就像汽车手动挡一个,想开那个档自己来
        public Object proceed() throws Throwable;
    
      //此方法是对目标方法添加参数时使用
        public Object proceed(Object[] args) throws Throwable;
    
    }

    使用如下:我这里后置没有把结果返回,因为设置了void,如果业务需要,可以把“我后年要生孩子”拿去处理

     

    最后呢介绍下joinPoint除了获取参数还能干啥:
    
    

     

    一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰
  • 相关阅读:
    天猫和淘宝有什么区别
    Oracle (内连接)
    共享受限资源,Brian的同步规则
    后台线程,优先级,sleep,yield
    runnable和thread的区别
    Oracle 左连接、右连接、全外连接、(+)号作用、inner join(等值连接) (转载)
    oracle创建表
    oracle常见错误
    GUID是什么意思及Guid在sqlserver中的使用
    表中查询重复的数据,如何通过sql语句查询?
  • 原文地址:https://www.cnblogs.com/wangbiaohistory/p/14937135.html
Copyright © 2011-2022 走看看