流程图
生命周期理解:
1、调用bean的构造方法创建bean(在启动容器的时候就已经创建了)
2、通过反射调用setter方法进行属性的依赖注入
3、如果Bean实现了BeanNameAware接口,Spring将调用setBeanName()方法,来设置Bean的name(相当于是xml文件中,bean标签后的id)
4、如果Bean实现lBeanFactoryAware接口,Spring将调用setBeanFactory()把beanfactory设置给Bean
5、如果存在BeanPostProcessor,Spring将调用它们的postProcessBeforInitialization(预初始化)方法,在Bean初始化前对其进行处理
6、如果Bean实现了InitializingBean接口,Spring将调用它的afterProPesrtiesSet方法。然后调用xml定义的init-method方法,两个方法作用类似,都是在初始化bean的时候执行
7、如果存在BeanPostProcessor,Spring将调用它们的postProcessAfterInitialization(后初始化方法),在Bean初始化后对其进行处理
8、Bean初始化到此算是完成,完成后Bean供应使用,此处分两种情况:
8.1、如果Bean为单例的话,那么容器会返回Bean给用户,并存入到缓存池中。如果Bean实现了DisposableBean接口,Spring将调用它destroy方法,然后调用在xml中定义的destroy-method方法。着两个方法作用类似,都是在Bean实例销毁前执行
8.2、如果Bean是多例的话容器将Bean返回给用户,剩下的生命周期由用户来控制