一、Spring容器启动流程
创建配置类
@ComponentScan(value = {"com.woniu"}) @Configuration public class MyConfig { } 复制代码
创建一个普通类
package com.woniu.service; import org.springframework.stereotype.Component; @Component public class Eservice { } 复制代码
创建一个启动类
public class Application { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class); } } 复制代码
在启动类的第三行打断点开始单步调试,进入spring的容器启动流程
这个方法非常重要,在循环依赖中对于同一个bean会多次调用,先从一级缓存中查询是否存在bean,若不存在,再从二级缓存中查询是否存在bean,如果还是没有找到,从三级缓存中查询singletonFactory,如果没有,则直接返回,若在三级缓存中找到singletonFactory,则调用工厂中的方法创建bean,然后在把bean添加到二级缓存中
什么是三级缓存