目标
- 将分散在程序各处的横切关注点剥离出来并以集中的方式进行表达
- 使得开发人员能够专注于业务逻辑的实现而非繁杂的非功能代码,简化了程序编写与单元测试
- 应用场景:日志、安全、事务
AOP VS 继承
核心概念
- Advice(通知):定义在连接点处的行为,围绕方法调用而进行注入
- Pointcut(切点):确定在哪些连接点处应用通知
- Advisor(通知器):组合Advice与Pointcut
实现
ProxyFactoryBean
- FactoryBean implementation that buids an AOP proxy based on beans in Spring BeanFactory(From Spring doc)
- Spring AOP的底层实现与源头
ProxyFactoryBean的典型配置
ProxyFactoryBean的基本构成
-
target:目标对象,需要对其进行切面增强
-
proxyInterfaces:代理对象所实现的接口
-
interceptorNames:通知器(Advisor)列表,通知器包含了通知(Advice)与切点(pointcut)
ProxyFactoryBean的作用
针对目标对象来创建代理对象,将对目标对象方法的调用转到对相应代理对象方法的调用,并且可以在代理对象方法调用前后执行与之匹配的各个通知器中定义好的方法
目标代理对象的创建
Spring通过两种方式来创建目标代理对象:JDK动态代理和CGLIB
如果目标对象实现了接口,那么Spring就会通过JDK动态代理为目标对象生成代理对象