issues
search
wittyResry
/
myIssue
My issue mark down^_^ 欢迎吐槽,讨论~~
https://github.com/wittyResry/myIssue/issues
The Unlicense
5
stars
1
forks
source link
spring AOP
#83
Open
wittyResry
opened
6 years ago
wittyResry
commented
6 years ago
AOP是OOP(Object Oriented Programming,面向对象编程)的补充。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。OOP适合纵向的关系,但并不适合定义横向的关系,比如日志记录、发送消息。
AOP-横切将那些影响了多个类的公共行为封装到一个可重用模块,命名为"Aspect",即切面。AOP目的是减少系统的重复代码,降低模块之间的耦合度,提升可维护性。
AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似。
实现原理
原理:在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。AOP框架将自动生成AOP代理:
默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。
JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。(jdk动态代理的应用前提,
目标类基于统一的接口,非接口不能实现
)
Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类(CGLIB是通过继承的方式做的动态代理,
fina类无法使用CGLIB做动态代理
)
cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势。
ref:
https://blog.csdn.net/dreamrealised/article/details/12885739
实现原理
ref: https://blog.csdn.net/dreamrealised/article/details/12885739