Spring Boot 学习 (二)- @SpringBootApplication

本文深入解析SpringBoot应用程序的启动过程,重点介绍了@SpringBootApplication的作用及其组成,包括@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan,揭示了SpringBoot如何实现一站式配置。
摘要由CSDN通过智能技术生成

从上一篇文章中,我们可以看到SpringBoot应用程序的启动入口代码如下:

package com.example.demo;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在这个启动类中,我们可以看到最耀眼的地方就是Annotation定义-@SpringBootApplication 和 启动方法SpringApplication.run,因此,要了解SpringBoot应用程序的启动原理,我们需要先从这两个地方入手。

一、@SpringBootApplication

我们按住ctrl点击@SpringBootApplication查看源码,可以看到@SpringBootApplication实际上是一个复合的Annotation:

@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 {
    .....
}

从源码可以看到它的定义使用了多个的Annotation进行标注,但是事实上,对于SpringBoot来说,最重要的只有只有以下三个Annotation,所以说@SpringBootApplication是一个“三体”结构:

@SpringBootConfiguration 

(这里的SpringBootConfiguration是2.0,1.0用的是@Configuration) 

@EnableAutoConfiguration

@ComponentScan

因此如果我们自己创建如下启动类,加上以上三个主要的Annotation,我们的整个应用的启动依然与默认的启动类功能对等:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class DemoApplication {

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

显然,@SpringBootApplication 这样的一站式复合Annotation显得更加方便些。

@SpringBootConfiguration

这里的@SpringBootConfiguration实际上就是JavaConfig形式@Configuration, @Configuration从Spring3.0开始使用,用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@EnableAutoConfiguration

@EnableAutoConfiguration与Spring框架中各种@Enable开头的Annotation定义的理念和做事方式其实一样的,借助@Import的支持,将所有符合自动配置条件的bean定义加载到IOC容器,仅此而已。

@ComponentScan

@ComponentScan其实很简单,其功能就是自动扫描并加载符合条件的组件或者Bean定义,最终将这些加载到容器中。

 

注:初学者,了解较少,如有错误之处,欢迎指出,感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值