Spring Bean的生命周期:

spring中 Bean的生命周期, 一个对象的创建,并不单单是 new 了之后就可以了. 因为99%情况下,这个对象中是还有一些别的属性的, 还需要对这些属性赋值, new操作仅仅是创建了该对象,属性未赋值,
Bean的生命周期就是, 从容器new 对象开始,---容器为这个对象各种赋值 和 AOP切面对该对象的增强-代理对象 和 我们自定义的初始化方法赋值----Bean 可以使用了放入单例池----容器关闭--调用Bean的销毁方法--我们自定义的销毁方法---结束

calss---BeanDefinition ----BeanFactoryPostProcessor----实例化new Person()----填充属性----Aware(这里指如果该对象有实现,继承各种各样的 ...Aware类,用来回调本身来赋值属性, 比如:BeanNameAware类( setBeanName() ), BeanFactoryAware类(setBeanFactory() ), ApplicationContextAware类( setApplicationContextAware() ) 等)----初始化(这里指如果xml中,该对象有 标签, 或者该对象有实现InitializingBean接口,调用afterPropertiesSet() 方法, 自定义的初始化方法)
----AOP,这里指如果有切面,对该类进行代理增强,将代理对象放入单例池----Bean可以使用并放入单例池中

直接上图

BeanDefinition Bean定义, 这个类中有该类的各种信息,重要的信息是beanClass这个属性 也就是说对象实例化的时候, 是在类上加注解@Component, @Scope等等, 根据beanClass和这些注解生成BeanDefinition, 之后实例化对象的时候,是根据BeanDefinition的信息来进行实例化的, 所以如果修改 BeanDefinition 中的beanClass这个属性,那么实例化的对象也会改变

BeanFactoryPostProcessor Bean工厂后置处理器,是在 BeanDefinition ----实例化 new Person(), 之间执行的

BeanFactory是 Bean工厂,可以创建,获取Bean, Bean工厂后置处理器(BeanFactoryPostProcessor) 是在BeanFactory组件完成之后执行, 目的是让我们来操作Bean工厂

先配置扫描,当spring扫描到一个类时,发现该类上有@Component注解, 他会生成该类对应的BeanDefinition, 并将BeanDefinition放到 BeanFactory工厂的map中, key:beanName, value:BeanDefinition, 当把所有扫描完成后,
BeanFactory组件就完成了, 之后就开始执行 BeanFactoryPostProcessor的方法, 之后才会实例化对象

BeanPostProcessor

猜你喜欢

转载自www.cnblogs.com/lvcai/p/13373013.html