Bean的生命周期
Spring中的一个Bean神明周期总体分为以下几个阶段:
细化Bean的生命周期:
从上面可以看出,可初步分为四个阶段:
- Bean的实例化阶段(通过反射创建对象)
- Bean的设置属性阶段(属性值非自动装配)
- Bean的初始化阶段(如数据源赋值、校验属性)
- Bean的销毁阶段(ioc容器销毁关闭,关闭数据源)
-
在设置属性阶段后,postProcessBeforeInitialization方法执行前,会执行很多Aware类型的接口,这种类型接口作用是加载资源到Spring容器中,让bean获取Spring容器中的服务。
-
在初始化阶段,有个特别重要的接口BeanPostProcessor(后置处理器),在初始化前、后调用:
-
初始化方式有三个,分别是:
1.InitializingBean的afterPropertiesSet方法
2.@PostConstruct注解标注的方法
3.配置的init-method -
容器销毁的方式有三个,分别是:
1.@PreDestroy注解标注的方法
2.DisposableBean接口的destroy()方法
3.配置的destroy-method
总结Bean生命周期:
- Bean容器找到Spring配置文件中Bean的定义;
- Bean容器利用java 反射机制实例化Bean;
- Bean容器为实例化的Bean 设置属性值;
- 如果Bean实现了BeanNameAware接口,则执行setBeanName方法;
- 如果Bean实现了BeanClassLoaderAware接口,则执行setBeanClassLoader方法;
- 如果Bean实现了BeanFactoryAware接口,则执行setBeanFactory方法;
- 如果Bean实现了xxxAware接口…;
- 如果Bean实现了ApplicationContextAware接口,则执行setApplicationContext方法;
- 如果加载了BeanPostProcessor(后置处理器)相关实现类,则执行postProcessBeforeInitialization方法;
- 如果Bean定义初始化方法(PostConstruct注解、配置init-method、实现了InitializingBean接口),则执行定义的初始化方法;
- 如果加载了BeanPostProcessor(后置处理器)相关实现类,则执行postProcessAfterInitialization方法;
- 当要销毁这个Bean时,如果自定义了销毁方法(PreDestroy注解、配置destroy-method、实现了DisposableBean接口),则执行定义的销毁方法。