xml 中 <bean>/ 注解 @Bean--->BeanDefinition---> 实例化(创建 bean 对象)---> 属性赋值 ---> 初始化(使用 bean 对象)---> 销毁
一、创建 Bean 对象
1. 解析 xml 配置或注解配置的类,得到 BeanDefinition 描述(如果有多个构造方法就要推断构造方法)
2.(确定好构造方法后)然后由得到的 BeanDefinition 描述通过反射创建 Bean 对象
3. 接着对 Bean 对象的属性进行填充赋值(通过 DI 依赖注入)
4. 再调用那些实现了 Aware 接口的方法,比如 BeanNameAware、BeanFactoryAware
5. 接着调用 BeanPostProcessor 的初始化前的方法和初始化后的方法,此时会进行 AOP,如果前置和后置方法中间有 init-method 初始化方法的话,就先调用 BeanPostProcessor 的初始化前置方法 --->init-method 初始化方法 --->BeanPostProcessor 的初始化后置方法
6. 最后将创建的 Bean 对象放入一个 Map 容器中,完成了 Bean 的初始化。
二、业务使用 Bean 对象
三、Spring 容器关闭时调用 DisposableBean 的 destory()方法销毁 bean 对象,如果对 Spring 配置了 destroy-method 方法,会自动调用配置的销毁方法。