springboot 源码初读

启动文件

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

这个主类做了一下4件事
1. 推断应用类型是普通项目还是Web项目
2. 查找并加载所有可用初始化器,设置到initializers属性中
3. 找出所有的应用程序监听器,设置到listeners属性中(全局存在的,获取上下文,处理获取的bean)
4. 推断并设置main方法的定义类,找到运行的主体(不知道主类,是没办法加载的)

注解

1@SpringBootApplication
    2@SpringBootConfiguration : springboot的配置
      3@Configuration :spring的配置类
       4 @Component:说明这也是spring的组件
    2@EnableAutoConfiguration :自动配置
      3@AutoConfigurationPackage: 自动配置包
        4@Import({Registrar.class}): 自动配置‘包注册’
      3@Import({AutoConfigurationImportSelector.class}):自动导入选择
         4  List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);  :获取所有配置
         4 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
              List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
              Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
              return configurations;     :获取候选配置
    2@ComponentScan

总结: springboot所有自动配置都是在启动的时候扫描加载的:spring.factories 所有的自动装配类都在这里。但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器,有了启动器,我们自动装配就会生效,ran庵后配置成功!

  1. springboot在启动的时候,从路径下/META-INF/spring.factories获取指定的值:
  2. 将这些自动装配的类导入容器,自动装配就会生效,帮我进行自动配置!
  3. 以前我们需要自动配置的东西,现在springboot帮我们做了
  4. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0RELEAES.jar这个包下
  5. 他会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
    6.容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器导入了这个场景需要的所有组件
posted @   小幼虫虫  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示