the sequence of activities that will take place between the time of Bean Instantiation and hand over of the Bean reference to the Client Application:
- The Bean Container finds the definition of the Spring Bean in the Configuration file.
---------------------在第2步之前还会检测是否实现了InstantiationAwareBeanPostProcessors,(源码注释:Give BeanPostProcessors a chance to return a proxy instead of the target bean instance),如果此postProcessBeforeInstantiation不返回null,后续
doCreateBean
方法中的aware方法,ini方法都不会执行----------
- The Bean Container creates an instance of the Bean using Java Reflection API.
- If any properties are mentioned, then they are also applied. If the property itself is a Bean, then it is resolved and set.
------------------------当执行第四步骤时候,bean在JVM中已经实例化,且完成了spring初始化的属性注入--------------
- If the Bean class implements the BeanNameAware interface, then the setBeanName()method will be called by passing the name of the Bean. (bean感知自己在factory中的名字)
- If the Bean class implements the BeanClassLoaderAware interface, then the method setBeanClassLoader() method will be called by passing an instance of the ClassLoader object that loaded this bean.
- If the Bean class implements the BeanFactoryAware interface, then the method setBeanFactory() will be called by passing an instance of BeanFactory object. (bean感知自己所在在的factory)
- If there are any BeanPostProcessors object associated with the BeanFactory that loaded the Bean, then the method postProcessBeforeInitialization() will be called even before the properties for the Bean are set.
- If the Bean class implements the InitializingBean interface, then the method afterPropertiesSet() will be called once all the Bean properties defined in the Configuration file are set.
- If the Bean definition in the Configuration file contains a 'init-method' attribute, then the value for the attribute will be resolved to a method name in the Bean class and that method will be called.
- The postProcessAfterInitialization() method will be called if there are any Bean Post Processors attached for the Bean Factory object.
- If the Bean class implements the DisposableBean interface, then the method destroy() will be called when the Application no longer needs the bean reference.
- If the Bean definition in the Configuration file contains a 'destroy-method'attribute, then the corresponding method definition in the Bean class will be called.
reference:
https://javabeat.net/life-cycle-management-of-a-spring-bean