SpringBean的生命周期总体分为四个阶段:
实例化阶段主要是创建对象,这里我们看到,对象的创建权交由Spring管理了,不再是我们手动new了,这也是IOC的概念。
属性填充阶段主要是进行依赖的注入,将当前对象依赖的bean对象,从Spring容器中找出来,然后填充到对应的属性中去。
初始化bean阶段做的事情相对比较复杂,包括回调各种Aware接口、回调各种初始化方法。
销毁bean阶段,主要是容器关闭或停止服务,对bean进行销毁处理。
实列化->属性注入->初始化->销毁
1: 实例化:根据配置文件中Bean的定义,利用java Reflection反射技术创建Bean的实例
2: 注入对象依赖的属性值
3: 处理各种Aware接口:Spring会检测该Bean是否实现了Aware接口,通过Aware类型的接口,可以让Spring框架为当前Bean注入相应的内容
如果Bean实现 BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean 的名字;
如果 Bean 实现 BeanClassLoaderAware接口,调用setBeanClassLoader()方法,注入ClassLoader对象的实例;
如果Bean实现 BeanFactoryAware接口,会调用它实现的 setBeanFactory()方法,注入的是Spring 工厂;
如果Bean实现ApplicationContextAware接口,会调用setApplicationContext()方法,注入Spring上下文
4: 执行BeanPostPocessor前置处理;如果想对 be an进行一些自定义的前置处理,那么可以让 Bean实现了BeanPostProcessor接口,将会在该阶段调用lpostProcessbeforeEmitialization(0bject obj,string s)方法。
5: 执行InitializingBean初始化方法: 如果Bean 实现了工nitializingBean接口,执行 afeterPropertiesSet()方法。
6: 执行init-method自定义初始化方法:如果Bean 在 Spring 配置文件中配置了init-method属性,则会自动调用其配置的初始化方法。
7: 执行benPostPosso后置处理:如果这个Beanl实现了BeanPostPocessos接口,将会调用postrocesskfterInitialization(bject obj, String s)方法,由于这个方法是在Bean初始化结束后调用;
8: 执行DspoableBen销畏Bean:当Bean不再需要时,会经过清理阶段,如果Bean 实现了DisposableBean这个接口,会调用其实现的destroy()方法执行销毁;
9: 执行destroy-method自定义销毁方法:如果这个Bean的Spring配置中配置了destory-method属性,会自动调用其配置的自定义销毁方法
SpringBean生命周期流程图