Spring Boot 学习 (二)- @SpringBootApplication

以你之姓@ 2022-05-15 03:14 222阅读 0赞

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

  1. package com.example.demo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class DemoApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(DemoApplication.class, args);
  8. }
  9. }

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

一、@SpringBootApplication

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

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @SpringBootConfiguration
  6. @EnableAutoConfiguration
  7. @ComponentScan(
  8. excludeFilters = {@Filter(
  9. type = FilterType.CUSTOM,
  10. classes = {TypeExcludeFilter.class}
  11. ), @Filter(
  12. type = FilterType.CUSTOM,
  13. classes = {AutoConfigurationExcludeFilter.class}
  14. )}
  15. )
  16. public @interface SpringBootApplication {
  17. .....
  18. }

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

@SpringBootConfiguration

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

@EnableAutoConfiguration

@ComponentScan

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

  1. @SpringBootConfiguration
  2. @EnableAutoConfiguration
  3. @ComponentScan
  4. public class DemoApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(DemoApplication.class, args);
  7. }
  8. }

显然,@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定义,最终将这些加载到容器中。

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

发表评论

表情:
评论列表 (有 0 条评论,222人围观)

还没有评论,来说两句吧...

相关阅读