zoukankan      html  css  js  c++  java
  • 搞懂aop三(aspect 基础)

    这个应该是工作中用的最多的。有必要掌握这块知识。

    aspect可以通过表达式函数以不同的方式描述连接点,方式包括:

      1、方法切点函数:通过描述目标类的方法信息来定位连接点;

      execution():括号里写,描述要代理方法的信息,支持通配符。

      @annotation():括号里写变量名,变量名就是增强方法参数的名,该参数的类型就是那些要目标类方法上加了的注解类型,多个使用,隔离args(name,age),指定前几个后面可以有任意的参数使用..,之前要加,args(name,age,..)

    。例:这样可以为满足dubSubmitPointCut切点定义的连接点且这些连接点方法上有DubSubmit注解的方法做代理

    这个切点也可以是别的类的一个方法,通过方法的全限名,即包名.类名.方法名  

        @Around("dubSubmitPointCut() && @annotation(dubSubmit)")
        public Object Around(ProceedingJoinPoint joinPoint,DubSubmit dubSubmit) 
    

      2、方法入参切点函数:通过描述目标类方法的参数信息来定位连接点

      arg():使用方法和@annotation类似。例:拦截入参是String的目标类方法

    @Before("poincut() && args(name)")
    public void before(String name)
    

      @arg():使用方法和@annotation类似,这里描述要匹配方法参数上加了指定注解的方法。

      3、目标类切点函数:通过描述目标类类型的信息来定位连接点

      within(),target(),@within(),@target()

      4、代理类切点函数:通过描述目标类的代理类信息来定位连接点

      this()

    切点表达式函数的通配符、逻辑运算符

      1、通配符:*,..(只有在方法中可以独立使用),+表示本身及子类,这个是最灵活也是最不好掌握的一个点。

        例1: * com.ljh.*.*()匹配com.ljh.service下类所有无参方法,但是不匹配com.ljh.service.impl下类的方法

        例2: * com.ljh.*..*(..) 匹配所有com.ljh包下所有的方法,不论这些方法是何返回类型,是何参数.

        注:execution(),within()支持所有的通配符。

      2、表达式函数逻辑运算符 && || ! 。

    增强类型:

      1、@Before 前置增强,目标方法执行之前

      2、@Around 环绕增强,这个可以执行目标方法,也就是说,他可以做前置增强,后置增强,final增强,异常增强,是非常强大的。

      3、@AfterReturning 后置增强,目标方法执行成功,发生异常不会触发

      4、@After fianlly增强,相当于try{目标方法}finally{after逻辑}

      5、@AfterThrowing 异常增强try{目标方法}catch{异常增强逻辑},这个增强下可以指定异常名throwing

  • 相关阅读:
    angularJs实现级联操作
    FastDFS简单入门小demo
    FastDFS初步认识--上传下载流程介绍
    什么是spu和sku
    centOS7 flask项目布署
    Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
    gunicorn+nginx配置方法
    supervisor的使用
    【linux】杀掉进程命令
    CentOS7 nginx安装与卸载
  • 原文地址:https://www.cnblogs.com/mao-yan/p/13539126.html
Copyright © 2011-2022 走看看