Bean的生命周期
(1) 容器寻找Bean的定义信息并将其实例化。
(2) 执行依赖注入,Spring按照Bean定义信息注入Bean的所有属性。
(3) 如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法,并传递Bean的ID作为参数。
(4) 如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。
(5) 如果BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialization()将被调用。
(6) 如果Bean实现了InitializingBean接口,afterPropertiesSet()方法会被调用;
如果Bean指定了init-method属性,则其指定的方法会被调用;
如果InitializingBean和init-method属性同时出现,前者先于后者执行。
(7) 如果有BeanPostProcessor和Bean关联,那么postProcessAfterInitialization()方法会被调用。
此时,Bean已经可以被系统使用,并且将被保留在Bean Factory中直到不再需要。
(8) 最后关闭应用时,BeanFactory会调用destroySingletons()方法,这时会执行:
如果Bean实现DisposableBean接口,destroy()方法会被调用;
如果指定了destroy-method属性,则其指定方法会被调用;
如果DisposableBean和destroy-method属性同时出现,前者先于后者执行。