1. JAR包形式启动时,
SpringBoot启动入口为@SpringBootApplication注解的main方法,如下图所示:
package com.mima.test.basic.sourcecode.learn.spring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBeanSourceCode {
public static void main(String[] args) {
SpringApplication.run(SpringBeanSourceCode.class, args);
}
}
Spring boot 启动入口SpringApplication.run返回ConfigurableApplicationContext,
run方法内部逻辑:
1. 启动listener(多线程启动)
2. 调用ConfigurableListableBeanFactory.getBeanFactory()
此时有两个实现:AbstractRefreshableApplicationContext & GenericApplicationContext,在这两个方法中有个方法getBeanFactory,用Synchronized控制代码块的同步,具体实现逻辑如下:
/** Synchronization monit