spring的bean加载流程
spring的bean加载流程,循环依赖
一: 实例化一个applicationContext的对象创建一个beanFactory工厂对象
二: beanFactory的后置处理器对当前的所有类进行扫描
三: 使用for循环将所有的类通过一个beanDefintion对象进行解析和初始化默认参数, 并 且将实例化后的对象缓存到beanDefintionMap中
四: 再次调用beanFactory的后置处理器对beanDefintion对象进行一些额外的扩展, 比方 说用户自定义实现的一些参数属性方法
五: Spring首先从singletonObjects (一 级缓存)中尝试获取,如果获取到了直接return
六: 如果获取不到并且对象在创建中,则尝试从earlySingletonObjects(二级缓存)中获 取,如果获取到了直接return
七: 如果还是获取不到并且允许从singletonFactories通过getObject获取,则通过 singletonFactory.getObject()(三级缓存)获取,如果获取到了就从singletonFactories中移 除,并且放进earlySingletonObjects (二级缓存)中
八: 如果三个缓存中都拿不到对象, spring会经过一 系列的验证并且 确定类的构造方法 后,调用类的构造方法通过反射实例化一个对象, 也就是createBean
九: 中间会经过非常多的判断,其中最关键的两个点是 是否需要注入属性,是否需 要生成代理对象
十: spring将创建好的bean存入到一级缓存singletonObject中, 此时一个bean的初始化 完成,随时可以被引用,根据用户业务做一些相关的操作
十一: 最后是销毁,在上下文初始化失败时,所有已经创建好的bean会销毁,或者当用 户关闭容器时,bean也会被销毁。除此之外,用户也可以自行调用destroy-类的方法手 动销毁一个bean

浙公网安备 33010602011771号