spring中 Bean的生命周期, 一个对象的创建,并不单单是 new 了之后就可以了. 因为99%情况下,这个对象中是还有一些别的属性的, 还需要对这些属性赋值, new操作仅仅是创建了该对象,属性未赋值,
Bean的生命周期就是, 从容器new 对象开始,---容器为这个对象各种赋值 和 AOP切面对该对象的增强-代理对象 和 我们自定义的初始化方法赋值----Bean 可以使用了放入单例池----容器关闭--调用Bean的销毁方法--我们自定义的销毁方法---结束
calss---BeanDefinition ----BeanFactory组建完成----BeanFactoryPostProcessor----实例化new Person()----填充属性----Aware(这里指如果该对象有实现,继承各种各样的 ...Aware类,用来回调本身来赋值属性, 比如:BeanNameAware类( setBeanName() ), BeanFactoryAware类(setBeanFactory() ), ApplicationContextAware类( setApplicationContextAware() ) 等)----初始化(这里指如果xml中,该对象有 < init-method >标签, 或者该对象有实现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工厂, 所以,一个类如果继承了BeanFactoryPostProcessor, 就可以获取到,BeanDefinition, 和BeanFactory,Bean
先配置扫描,当spring扫描到一个类时,发现该类上有@Component注解, 他会生成该类对应的BeanDefinition, 并将BeanDefinition放到 BeanFactory工厂的map中, key:beanName, value:BeanDefinition, 当把所有扫描完成后,
BeanFactory组件就完成了, 之后就开始执行 BeanFactoryPostProcessor的方法, 之后才会实例化对象
BeanPostProcessor, Bean后置处理器,实在 bean实例化之后执行
====================================================
BeanDefinitionReader装载过程: 如图所示;BeanDefinitionReader读取xml文件,生成BeanDefinition,然后注册到BeanDefinitionRegistry中,
有了BeanDefinition,然后就工厂 BeanFactory,来根据BeanDefinition,来实例化
{{uploading-image-115734.png(uploading...)}}
1, Bean的生命周期总结:几个关键的类/接口
2, BeanDefinitionReader: 作用:读取xml, 创建BeanDefinition,并注册到 BeanDefinitionRegistry中
3, BeanDefinition: 作用: 这个是Bean定义,里面包含了Bean的各种信息(包括,单例,beanClassName,isLazy....)Bean的创建都是按照BeanDefinition 为模板创建的
4, BeanFactory: 作用:BeanFactory中的实现类 AbstractBeanFactory中有个map, key-->beanName value-->BeanDefinition
5, BeanFactoryPostProcessor: 这个是BeanFactory的后置处理, 我们可以从中获取BeanFactory工厂, BeanDefinition
6, 实例化Bean后,各种各样的Aware接口/类: 比如:BeanNameAware, BeanFactoryAware,ApplicationContextAware...作用是: 调用自身来给属性注入
7, BeanPostProcesspr: 作用: 这个是对Bean初始化的 前,后处理类, 先执行postProcessBeforeInitialization()方法,然后Bean初始化(调用构造方法, 或者如果实现InitializingBean就执行他的 afterPropertiesSet(),或者自定义的初始化方法), 之后执行,postProcessAfterInitialization()
8, Bean初始化完成可以使用了,放入单例池, 当容器关闭后,调用DispsableBean的distory()方法, 调用自定义销毁方法---结束