1.实例化一个 Bean, 也就是我们常说的 new。
2.按照Spring上下文对实例化的Bean进行配置,也就是 IOC 注入。
3.如果这个Bean实现了 BeanNameAware 接口,会调用它实现的 setBeanName(String beanId) 方法,此处传递的是Spring配置文件中Bean的 ID。
4.如果这个Bean实现了 BeanFactoryAware 接口,会调用它实现的 setBeanFactory() 传递的是 Spring 工厂本身(可以使用这个方法获得其他Bean)。
5.如果这个Bean实现了 ApplicationContextAware 接口,会调用 setApplicationContext(ApplicationContext() 方法,该方法同样可以实现步骤4,但比步骤4更好,因为 Application 是 BeanFactory 的子接口,有更多的实现方法。
6.如果这个Bean关联了 BeanPostProcessor 接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcess 经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用 afte() 方法)。
7.如果这个Bean在Spring配置文件中配置了 init-method 属性会自动调用其配置的初始化方法。
8.如果这个 Bean 关联了 BeanPostProcess 接口,将会调用 postAfterInitialization(Object obj, String s) 方法。
注意:以上工作完成后就可以使用这个Bean了,那这个Bean是一个 single 的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例。
9.当Bean不再需要的时候,会经过清理阶段,如果Bean实现了 DisposableBean 接口,会调用其实现的 destroy() 方法。
10.最后,如果这个Bean的Spring配置中配置了 destroy-method 属性,会自动调用其配置的销毁方法。