美文网首页
SpringAOP概述

SpringAOP概述

作者: 瓢鳍小虾虎 | 来源:发表于2020-12-24 15:41 被阅读0次

    Aspect:所谓切面,面向的不是某一个对象的某一个方法,而是所有对象的某个方法,或者满足某些条件的对象的满足某些条件的方法,面向的不是点,而是面。

    JoinPoint:切面内有很多的切点,可以表示为方法的开始和结束两端,可以用来在方法前后做一些处理,相当于在方法内前后都加了一些代码执行一些逻辑,但是具体不是这样实现的,而是用代理对象实现的。具体有2种方式:cglib和动态代理。

    cglib:cglib是一个代码生成库,主要用于aop框架,拦截方法等操作。

    cglib vs 动态代理:
    1)cglib底层使用ASM框架,主要原理是操作字节码生成新的类。
    2)动态代理只能代理接口,如果一个普通类没接口就没法代理。
    3)动态代理提供Proxy类创建代理,cglib提供Enhancer类创建代理。
    4)两者都可用于aop实现。

    beforeAdvice/afterAdvice:方法开始的切点做的事情就叫beforeAdvice,方法结束的切点做的事情就叫afterAdvice。

    Pointcut:类似于一种横切的动作,在程序中通常用注解@Pointcut表示,用来设置匹配切点的规则。spring也提供了一些简便的注解如@annotation等。

    // 匹配所有public定义的方法
    @Pointcut("execution(public * *(..))")
    private void anyOperation(){}
    
    // 匹配所有以set开始命名的方法
    @Pointcut("execution(* set*(..))")
    private void anyOperation1(){}
    
    // 匹配对应包下的所有方法
    @Pointcut("within(com.abc.def..)")
    private void anyOperation2(){}
    
    // 匹配带有注解com.abc.def.anno的所有方法
    @Annotation("com.abc.def.anno")
    private void anyOperation3(){}
    

    相关文章

      网友评论

          本文标题:SpringAOP概述

          本文链接:https://www.haomeiwen.com/subject/vvjmnktx.html