Spring(1)--IOC和AOP原理
1、BeanFactory
----getBean取得IOC容器中管理的Bean
----Bean的取得是通过指定名字来索引的
2、使用IOC容器时,需要几个步骤
----创建IOC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息
----创建BeanFactory
----创建一个载入BeanDefinition的读取器
这里使XmlBeanDefinitionReader来载入xml文件形式的BeanDefinition,通过一个回调配置给BeanFactory
----从定义好的资源位置读取配置信息,具体的解析过程由xmlBeanDefinitionReader来完成,完成整个载入和注册bean定义之后,需要的IOC容器就建立起来了
3、IOC容器的初始化三个步骤
----Resource定位
----载入:把用户定义好的bean表示成IOC容器
----注册:通过BeanDefinitionRegistry接口实现,在IOC容器内部将BeanDefinition注册到一个HashMap中,IOC容器就是通过这个HashMap来持有这些BeanDefinition数据的
4、注入
另一个过程是依赖注入,主要是取得setter的方法,反射。
依赖注入发生在应用第一次向容器索要bean时,向容器索要bean是通过getBean的调用来完成的,可通过设置bean的lazy-init来预实例化初始化时完成bean的依赖注入。
5、IOC容器中bean的生命周期
----bean实例的创建
----为bean实例设置属性
----调用bean的初始化方法
----应用可以通过IOC容器使用bean
----当容器关闭时,调用bean的销毁方法
6、afterProperties
在调用bean的初始化方法之前,会先启用afterPropertiesSet的过程,需要bean实现InitializingBean的接口。
7、BeanPostProcessor
这个bean的后置处理器是一个监听器,监听容器触发的事件,将它向IOC容器注册后,容器中管理的bean具备了接收了IOC容器事件回调的能力。
实现方法:实现接口类BeanPostProcessor
然后设置到xml的bean配置文件中,该接口类有两个接口方法,一前一后
postProcessBeforeInitialization init-method方法
bean初始化之前提供回调入口
postProcessAfterInitialization
bean初始化之后提供回调入口
8、在完成bean的生成和依赖注入以后,开始对bean进行初始化,这个初始化包括了对后置处理器postProcessBean的回调
9、依赖注入的方式
setter
autowiring (autowire-by-name、autowire-by-type)
10、AOP
基础+切面+配置
基础:初为待增强对象或者目标对象
切面:通常包含对于基础的增强应用
配置:可看成一种编织
advice
--BeforeAdvice before方法
--AfterAdvice afterReturning
--ThrowsAdvice 没有指定需要实现的接口方法,抛出异常时被回调,afterThrowing
pointCut
决定advice通知应该作用于哪个连接点,哪个方法或哪些方法
advisor通知器
结合advice和pointcut
定义:使用哪个通知,并在哪个关注点使用它
动态代理
java动态代理
cglib