Aspects,切面
spring-aop 是spring-aspects的上层建筑 targetClass MethodInvoker
spring-aspects
从IOC中取得代理以后的对象,对每个方法进行重写,加入一些切面调用所需要的东西
do开头的方法都是具体干活的方法:doCreateBean
AOP通知
触发器,Trggier 专门监听的定时器
AdvisorAdapterRegistrationManager,在bean对象初始化后注册通知适配器,AdvisorAdapterRegistrationManager是BeanPostProcessor的一个实现类,其主要作用为容器中管理的Bean注册一个面向切面编程的通知适配器,以便在Spring容器为所管理的Bean进行面向切面编程时提供方便
1、Autowiring,实现原理,:SpringIOC容器的依赖自动装配功能,不需要对Bean属性的依赖关系做显式声明,只需要在配置好autowiring属性,IOC容器会自动使用反射查到属性的类型和名称,然后给予属性的类型或者名称来自懂匹配容器中管理的Bean,从而自动的完成依赖注入
通过对autowiring自动装配特性的理解,我们知道容器对Bean的自动装配发生在容器对Bean依赖注入的过程中,在前面对Spring IOC容器的依赖注入过程源码分析中,我们已经知道了容器对Bean实例对象的属性注入的处理发生在AbstractAutoWireCapableBeanFactory类中的populateBean方法中国年,我们通过程序流程分析autowiring的实现原理:
(1)、AbstractAutoWireCapableBeanFactory对Bean实例进行属性依赖注入
应用第一次通过getBean方法(配置了lazy-init预实例化属性的除外),向IOC容器索取Bean时,容器创建Bean实例对象,并且对Bean实例对象进行属性依赖注入,AbstractAutoWireCapableBeanFactory的poopulateBean方法就是实现Bean属性依赖注入功能。
(2)、springIOC容器根据Bean名称活着类型进行autowiring自动依赖注入,通过属性名进行自动依赖注入的相对比通过属性类型进行自动依赖注入要稍微简单一些,但是,真正实现属性注入的是DefaultSingletonBeanRegistry类的registerDependentBean方法
(3)、DefaultSingletonBeanRegistry类的registerDependentBean方法对属性注入
springAOP,如果执行规则呢
一个切面就代表着N个Bean的一个集合,这N个Bean,它们都拥有共同点,所以它们组成了一个切面,举例:事物管理的时候,就用到了切面的定义,
提问:
1、spring的AOP默认使用的是jdk的动态代理还是CGlib?
IOC判断,如果被代理的类实现了一个接口,那么默认用jdk动态代理,如果被代理的对象没有实现任何接口,那么就默认用cglib
1、加载配置信息,解析成AopConfig
2、交给AopProxyFactory,调用一个CreateAopProxy方法;
3、JdkDynamicAopProxy调用,advisedSupport的getInterceptorsAndDynamicInterceptionAdvice方法,得到方法拦截器链,并保存到一个List容器中,MethodInterceptor容器是List
4、递归执行拦截器方法proceed()方法。
最终就是有一个ACiesor来调用切面中的方法
网友评论