上一篇【spring源码-9】bean的实例化(6)循环依赖
引题
看到这里,bean的实例化已经接近尾声,ioc已完结,接下来就是spring另外一个核心-aop。 spring aop 是依赖于 ioc 来管理的。
早期的AOP
在没有出现注解之前,spring的功能都是通过配置实现的,早期的aop也不例外,有三种配置方式。这里不描述长篇的理论,可以简单理解为spring aop 就是对现有方法的增强。
基于接口配置
该方式是在spring 1.2 版本出现的,也是最早的 aop。
Advice 方式
- 定义需要被增强的类
- 定义advice(增强)
- 通过配置使增强作用于目标方法
- 调用代理对象增强方法
Interceptor 方式
- 定义拦截器
- 通过配置使增强作用于目标方法
两种方式其实一样,都实现了 Advice 接口
Advisor 方式
Advice、Interceptor 作用范围是类中所有的方法,不能指定方法。由此引入了 Advisor 概念。 Advisor 可以指定 Advice 和 目标方法:
- 指定代理对象和增强
- 创建Advisor 和 代理对象
到此,我们已经可以实现增强指定方式,但是需要为每一个类创建代理对象,之后使用bean的时候直接获取代理对象。功能有了,但是成本高。
自动配置 autoproxy
BeanNameAutoProxyCreator
- 指定代理对象和增强
- 创建 AutoProxyCreator
此时的代理对象不是手动生成的了,代理对象的名称会有变化,变成了目标对象的bean名称。
RegexpMethodPointcutAdvisor
- 指定代理对象和增强
- 创建 RegexpMethodPointcutAdvisor
不过这种方式不能指定到方法
总结
spring 在 1.2 版本的时候是通过 接口 + ProxyFactoryBean 的方式设置代理。
注:本文通过源码 + 行说明的方式进行描述,若不好理解可留言。本文仅为个人学习记录,有错误的地方,请大佬们指正。