面试中若问道spring的启动流程,其实和问bean的生命周期是差不多的意思
这里我说下我个人的理解,bean的生命周期指的是:
被spring管理的一个bean从创建到销毁的过程,一般分为:实例化→属性注入→初始化→使用→销毁五大阶段,初始化阶段再细分为 Aware、前置处理、自定义初始化、后置处理
1.实例化:当我们启动项目时,spring框架扫描所有的配置类,通过构造方法或工厂创建bean对象(通过反射调用构造函数或new Bean())
2.属性赋值:通过@Autowired,@Value注解,xml配置,set方法注入属性
3.初始化:处理aware回调(设置bean名称,上下文信息);bean的前置增强(如@PostConstruct);bean的自定义初始化();beand的后置增强(如aop代理创建)
4.使用:注入到容器后,通过getBean()获取bean对象,被应用程序调用
5.销毁:销毁前回调:@PreDestroy 方法(类似退休前的交接工作)
自定义销毁:DisposableBean.destroy() 或 destroy-method(类似生命终结)
tip:Aware 接口 先于 BeanPostProcessor
初始化顺序:@PostConstruct → afterPropertiesSet() → init-method
流程图如下:
代码示例见:LocalDemo/src/main/java/com/local/demo/test/beanlife