Spring框架是一款轻量级的开发框架,主体是IOC(控制反转)和AOP(面向切面编程),可用于解耦,以及简化第三方中间件技术的使用
Spring中的bean是被IOC容器管理的对象,一般通过配置或者注解,告诉IOC容器管理哪些对象,那么既然是对象,就肯定有它自己的生命周期:
1.实例化
2.属性赋值
3.初始化
4.使用
5.销毁
接下来
第一步:Spring框架会取出BeanDefinition的信息按规则进行判断,最终将一个普通的Bean通过反射进行实例化
第二步:当Bean对象生成后,这时候还没有任何的信息及属性,所以需要Bean的属性进行填充,注入Bean所依赖的其他对象或属性
第三步:紧接着进行初始化操作,分为以下几步
1. 执行一些Aware接口方法
1)如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。
2)如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。
3)如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调setApplicationContext() 方法传入当前 ApplicationContext 实例的引用。
2.执行前置处理,实现BeanPostProcessor接口,调用PostProcessorBeforeInitializing() 方法
3.执行InitializingBean接口的初始化方法,实现了InitializingBean接口,调用afterPropertiesSet方法
4.执行自定义init初始化方法,若Bean在Spring配置文件中配置了init-method属性,会自动调用其配置的初始化方法
5.执行后置处理,在实现了BeanPostProcessor接口,调用PostProcessAfterImitialization,初始化结束后调用
第四步:初始化完成后,就可以投入使用了,当bean对象不再使用时,可以进行下一步的销毁
第五步:销毁
1.首先判断Bean是否实现了DestructionAwareBeanPostProcessor接口,如果实现了,则会执行DestructionAwareBeanPostProcessor后置处理器的销毁回调方法
2.其次会判断Bean是否实现了DisposableBean接口,如果实现了将会调用其实现的destroy()方法进行销毁
3.最后判断这个Bean是否配置了dlestroy-method等自定义的销毁方法,如果有的话,则会自动调用其配置的销毁方法;
总结描述:Spring 中Bean的生命周期是通过反射创建出对象之后,经过属性赋值,初始化直到bean成为一个完整的对象,最终存到单例池中,经历三大阶段实例化===》初始化===》完成(存放到单例池中)