zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    ini_set /ini_get函数功能-----PHP
    【转】那个什么都懂的家伙
    word 2007为不同页插入不同页眉页脚
    August 26th 2017 Week 34th Saturday
    【2017-11-08】Linux与openCV:opencv版本查看及库文件位置等
    August 25th 2017 Week 34th Friday
    August 24th 2017 Week 34th Thursday
    August 23rd 2017 Week 34th Wednesday
    August 22nd 2017 Week 34th Tuesday
    August 21st 2017 Week 34th Monday
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/7047264.html
Copyright © 2011-2022 走看看