Spring-AOP理论

    xiaoxiao2022-07-13  152

    这里感谢 的原博客https://juejin.im/post/5aa7818af265da23844040c6#heading-0

    个人笔记整理 1.什么是AOP?

    AOP即面向切面编程,相比OOP–面向对象编程,由于面向对象中最基本的单位是类 Spring中关于AOP的定义: 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

    2.AOP中的基本概念 不得不说,AOP的概念是真的多且难以理解,不过不用担心,聪明的你已经准备好战胜它们了。

    通知(Adivce)

    通知有5种类型:

    Before 在方法被调用之前调用

    After 在方法完成后调用通知,无论方法是否执行成功

    After-returning 在方法成功执行之后调用通知

    After-throwing 在方法抛出异常后调用通知

    Around 通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行

    切点(Pointcut) 切点在Spring AOP中确实是对应系统中的方法。但是这个方法是定义在切面中的方法,一般和通知一起使用,一起组成了切面。

    连接点(Join point) 比如:方法调用、方法执行、字段设置/获取、异常处理执行、类初始化、甚至是 for 循环中的某个点 理论上, 程序执行过程中的任何时点都可以作为作为织入点, 而所有这些执行时点都是 Joint point 但 Spring AOP 目前仅支持方法执行 (method execution) 也可以这样理解,连接点就是你准备在系统中执行切点和切入通知的地方(一般是一个方法,一个字段)

    切面(Aspect) 切面是切点和通知的集合,一般单独作为一个类。通知和切点共同定义了关于切面的全部内容,它是什么时候,在何时和何处完成功能。

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

    织入(Weaving) 组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

    3.Spring中对AOP的支持 首先AOP思想的实现一般都是基于代理模式,在JAVA中一般采用JDK动态代理模式,但是我们都知道,JDK动态代理模式只能代理接口,如果要代理类那么就不行了。因此,Spring AOP 会这样子来进行切换,因为Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理,当你的真实对象有实现接口时,Spring AOP会默认采用JDK动态代理,否则采用cglib代理。

    如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类; 如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类——不过这个选择过程对开发者完全透明、开发者也无需关心。

    最新回复(0)