Springtboot源码(一)

一、简单构建一个springboot项目

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

  只要启动上述代码,就能启动一个基本的springboot项目,springboot启动的核心就在于  @SpringBootApplication 注解以及 SpringApplication.run(SpringbootApplication.class, args); 

下面也将围绕这两个方法进行讲解。

 

二、@SpringBootApplication 原理

复制代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
复制代码

  源码如上,可以看到@SpringBootApplication 是个符合注解,其中重点是

  • @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

  • @EnableAutoConfiguration

 

  2.1  第一个注解@ComponentScan

@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })  

  扫码根路径下所有@Controller @Service @Respository @componet 并注入到spring容器中,然后排除TypeExcludeFilter和AutoConfigurationExcludeFilter中定义的bean。

 

  2.2  第二个注解:@EnableAutoConfiguration (核心)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

  查看源码可知,@EnableAutoConfiguration也是一个符合注解,其中

  • @Import(AutoConfigurationImportSelector.class)
  • @AutoConfigurationPackage

    2.2.1  @Import(AutoConfigurationImportSelector.class)

   @import注解用于将bean导入到spring容器中,具体哪些bean需要导入容器则查看AutoConfigurationImportSelector 源码,查看AutoConfigurationImportSelector 的

 selectImports 方法,该方法加载META-INF/spring.factories下EnableAutoConfiguration的类(常用的JdbcTemplateAutoConfiguration等自动注解类)加载到容器中,如下图spring.factories

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • @EnableAutoConfiguration
posted @   shyroke、  阅读(219)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~
点击右上角即可分享
微信分享提示