• spring in action小结4.1


    1 横切关注点:可以被描述为影响应用多处的功能。横切关注点可以被模块化为特殊的类,这些类被称为切面。

    2 AOP自己的术语,通知(Advice)、切点(pointcut)、连接点(joinpoint)

    切面的工作被称为通知,通知定义了切面是什么以及如何使用,还解决了何时执行这个工作的问题。

    3 切面的通知类型

    1)前置通知(Before)2)后置通知(After)3)返回通知(After-returning)4)异常通知(After-throwing)5)环绕通知(Around)

    4 连接点(join point):是在应用执行过程中能够插入切面的一个点。切面代码可以利用这个点插入到应用的正常流程中,并添加新的行为。

    5 切点(Pointcut):切点有助于缩小切面通知的连接点范围。如果说通知定义了切面的“什么”和“何时”的话,切点就定义了“何处”。切点的定义会匹配通知所要所要织入的一个或多个连接点。

    6 切面(Aspect):切面是通知和切点的结合。通知和切点共同定义了切面的全部内容--他是什么,在何时和何处完成其功能。

    7 引入(Introduction):引入允许我们向现有的类添加新方法或属性。

    8 织入(Weaving):织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。

    可以进行织入的点

    1)编译器:切面在目标类编译时被织入,这种方式需要特殊的编译器。

    2)类加载期:切面在目标类加载到 JVM 时被织入。需要特殊的类加载器,他可以在目标类被引入应用之前增强该目标类的字节码。

    3)运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态的创建一个代理对象。Spring AOP就是以这种方式织入切面的。

    9 Spring是基于动态代理的,所以spring只支持方法连接点,并且不支持构造器连接点,我们无法在bean创建时通知应用。

    10 spring支持的切点表达式

    指示器 描述
    arg() 限制连接点匹配参数为指定类型的执行方法
    @args() 限制连接点匹配参数由指定注解标注的执行方法
    execution() 用于匹配时连接点的执行方法
    this() 限制连接点匹配AOP代理的bean引用为指定类型的类
    target() 限制连接点匹配目标对象为指定类型的类
    @target() 限制连接点匹配特定的执行对象,这些对象对应的类要具有指定类型的注解
    within() 限制连接点匹配指定类型
    @annotation 限制匹配带由指定注解的连接点

    11 切入点表达式,spring具体到方法,因此指示器要指定到方法。在指示器中可以使用逻辑关系进一步限制切点位置。可以使用and/or/not。

    12 spring的通知

    注解 通知
    @After 通知方法会在目标方法返回或抛出异常后调用
    @AfterReturning 通知方法会在目标方法返回后调用
    @AfterThrowing 通知方法会在目标方法抛出异常后调用
    @Around 通知方法会将目标方法封装起来
    @Bedore 通知方法会在目标方法调用之前执行

    13 定义切面

    @Aspect
    public class MyInspect {
    
        /**
         *
         */
        @Pointcut("execution(* com.dwzx.zjg.investfinance.buy.test.*.*(..))")
        public void performance() {}
    
        /**
         * 
         */
        @Before("performance()")
        public void fun1() {
            System.out.println("fun1");
        }
    
    
    }
    @Pointcut定义了一个切点表达式,在其他方法中可以直接引用。

    14 开启切面注解解析

    在JavaConfig中使用如下方式,在配置类的类级别上使用@EnableAspectJAutoProxy 启用自动代理功能。

    @Configuration
    @EnableAspectJAutoProxy
    @ComponentScan
    public class ConcertConfig {
    
        /**
         * 声明MyInspect Bean
         * @return
         */
        @Bean
        public MyInspect myInspect() {
            return new MyInspect();
        }
    }
  • 相关阅读:
    linux 修改 properties
    用Python串口实时显示数据并绘图pyqtgraph
    Python pip国内源
    设计模式之享元模式
    阿里云数据库李飞飞:云计算推动数据库向云原生快速演进
    不懂代码,他怎么开发了20多个政务应用?
    2021十大科技趋势来了!阿里巴巴达摩院全新发布
    2020年勒索病毒事件盘点及未来发展趋势
    一文详解 Nacos 高可用特性
    “让专业的人做专业的事”,畅捷通与阿里云的云原生故事 | 云原生 Talk
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/7047264.html
Copyright © 2020-2023  润新知