spring bean的生命周期大概可以分为五个阶段
1.创建前准备spring容器启动,启动完成之后会做一个简单的扫描,把BeanName变成BeanDefinition存到一个BeanDefinitionMap当中,然后对map进行遍历,遍历完成之后认证,比如认证是否单例模式、是否原型、是否抽象、是否DepensOn、是否懒加载、是否bean的名字符合等
2.创建实例阶段先获取当前实例化的类是否存在单例池中,有没有提前暴露,若没有,则开始创建,通过一个叫推断构造方法这个过程,得到一个最佳的构造方法,推断完成之后,就通过反射来实例化一个java对象,再对这个bean做一个初始化工作,比如是否BeanDefinition合并、是否支持循环依赖,支持的话会提前暴露ObjectFactory这个工厂类,存到三级缓存中
3.依赖注入阶段如果被实例化的bean存在依赖其它bean的一些情况,则需要对这些依赖的bean进行对象注入,比如@Autowired以及setter注入等配置形式接着就会执行我们各种接口的回调,比如我们SpringFramework框架当中,像是ApplicationContextAware、BeanNameAware、ClassLoaderAware等等各种接口回调再接着它会去做生命周期初始化的回调,比如我们加了@PostConstrout、加了InitializerBean这个接口,或者XML这种Spring生命周期初始化回调方法
4.容器缓存这个时候bean就能够使用了,如果项目加了AOP,那么就会生成代理,jdk代理、CGlib代理,没有添加AOP的话,就不会生成代理,会去做一些事件的发布。到了这步,就会把它放入我们的单例池当中,就存在我们的spring当中了。
5.销毁实例spring应用上下文被关闭的时候,那么这个上下文中所有的bean会被销毁,如果存在bean实现了像DisposableBean接口,或者配置了destory-method属性的一些方法,会在这个阶段被调用
如果有错误的地方,请多指正
从源码的角度说明spring生命周期
最新推荐文章于 2024-11-15 14:09:57 发布