Spring AOP

2021-03-04 22:28

阅读:649

标签:sys   面向切面编程   out   spring容器   步骤   抽取   动作   完整   catch   

AOP
    作用: 可以帮助你抽取共性内容, 简化我们书写, 增强我们的简单类!!!!!
    概念: 面向切面编程(横向开发) OOP: 面向对象编程(竖向开发)
    专业名词
        连接点
            指我们所有的方法
        切入点
            那些想要被增强的方法
            切入点表达式
                完整写法
                    execution(修饰符 返回值类型 包名.类名.方法名(参数类型))
                    *
                        匹配任意字符或者任意类型
                    ..
                        匹配任意个个数或者层级
                    例如
                        execution(* cn..User*.*(..))
                        匹配, 任何返回值,  在cn下就行轮层级, 必须User开头的类, 方法名任意,参数个数任意, 参数类型也任意
        通知
            我们共性内容存放的地方
        切面
            来描述我们"通知"和"切入点"的关系
        织入
            将共性方法还原到切入点的动作
        通知类型(织入类型)
            前置增强
                before
                    织入在原有逻辑之前
            后置增强
                after
                    织入在原有逻辑之后, 即使原有逻辑出现了异常也会执行!!!
            后置返回结果增强
                after-returning
                    只有原有逻辑正常执行完毕后才会增强
            后置出现异常增强
                after-throwing
                    只有原有逻辑出现异常才会增强
            环绕增强
                around
                    包含以上四种的所有特性
    xml方式
        AOP使用步骤
            1.将你所有bean放入spring容器中
            2.需要在配置文件中引入aop标签
                xmlns:aop="http://www.springframework.org/schema/aop"
                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            3.需要配置aop, 主要配置"切面"
                  
       
       
       
       
           
           
           
           
           
           
          
           

       
   
        细节问题
            在"通知"中获取"切入点"的参数
                在"通知"中的方法中额外定义一个参数JoinPoint joinPoint
                    joinPoint.getArgs();可以获取所有的原来的参数们
                特点: 每种织入类型都能够拿到参数
            在"通知"中获取"切入点"的返回值
                特点: 只有after-returning和around可以拿到
                after-returning
                    可以 在我们"通知"的方法中额外定义一个参数用来接受返回值 Object result
                          //提交事务
    public void commit(Object result){// after -returning
        System.out.println("提交事务");
    }
                    需要在配置文件中使用 returning的指向我们"通知"的方法中的参数名, 名字要对应
                        
                around
                    同上
            在"通知"中获取"切入点"的异常
                特点: 只有around 和after-throwing
                after-throwing
                    可以 在我们"通知"的方法中额外定义一个参数用来接受返回值 Throw e
                            public void startTraction(Throwable e){// before

        System.out.println("开启事务");
    }
                    需要在配置文件中使用throwing的指向我们"通知"的方法中的参数名, 名字要对应
                        
                around
                    可以直接拿到异常, 直接try,catch包裹一样, 在自己catch里面即可拿到
    注解方式
        AOP使用步骤
            1.需要定义"通知类", 在通知类中添加@Aspect,代表切面
            2.编写切点表达式
                局部
                    @Before("execution(切点表达式)")
                全局
                    需要定义一个方法, 这个方法无参无返回值, 需要@PointCut(execution(切点表达式))
                    需要引入切点表达式
                        @Before("切点表达式所在的方法名()")
            细节问题
                同xml方式
            需要在主配置中加入扫描AOP的东西
                  
   
  
   
                在配置类中使用纯注解开启aop的解析
                    @EnableAspectJAutoProxy


评论


亲,登录后才可以留言!