Spring处理器和Bean的生命周期
Spring处理器和Bean的生命周期
Spring处理器是对Bean对象的的开发可以对BeanDifinition进行操作,例如动态添加、修改BeanDefinition、动态修改Bean。,也可以在Bean对象创建后对Bean对象进行代理增强。
注意:对于处理器要又一个正确的认知,必须要对Bean生命周期有一个良好的认知。
两种处理器
Bean工厂后处理器
实现方式:将BeanFactoryPostProcessor交给Spring容器管理,实现BeanFactoryPostProcessor接口,实现postProcessBeanFactory方法。
xml配置
运行结果
案例1:修改BeanDifinition对象达成狸猫换太子的效果
Bean工产后处理器类
运行结果
案例2:增加BeanDifinition对象,实现了动态注册。
Bean工厂后处理器类
测试和结果
Bean后处理器
在bean创建后对生效,可以对Bean进行是对象创建之后,缓存到singletonObjects单例池之前,对Bean初始化过程的操作,包括属性的填充,初始化方法的执行等。二次加工如动态代理。
实现方式通过实现 BeanPostProcessor接口,实现其postProcessBeforeInitialization(在 Bean 初始化之前调用()和postProcessAfterInitialization(在 Bean 初始化之后调用)方法,
实现案例:对Bean对象的代理增强
实现BeanPostProcessor
Springxml文件配置
测试结果
Bean对象的生命周期
即:Bean对象实例化之后(反射创建出对象),到bean成为一个完整对象,最终存到singletonobjects中的过程。最终分为三个阶段。
Bean实例化阶段:Spring框架会取出BeanDefintion的信息进行判断当前Bean范围是否是延迟加载。是否FactoryBean等,在将BeanDefintion存放到BeanDefintionMap后,创建Bean对象之前,可以调用Bean工厂后处理器对其进行修改增加等操作。
Bean初始化方法阶段,通过对BeanDefintionMap进行遍历创建Bean对象,此时Bean对象还是个半成品,可以调用Bean后处理器对其进行Aop代理增强,此后还会执行自动义初始化方法inti-method方法等,该阶段是最具技术含量和复杂的阶段
完成阶段:Bean成为了一个完成Spring Bean,被存储到单例池singleonObjects完成了Spring Bean的整个生命周期。