【SpringBoot】SpringBoot自动配置(二)

  SpringBoot项目创建参考【SpringBoot】SpringBoot快速入门(一)

  本文介绍SpringBoot项目的POM文件及自动配置

POM文件

  1、SpringBoot的pom文件中,看到都依赖一个springboot的父项目,如下

1 <parent>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring‐boot‐starter‐parent</artifactId>
4     <version>2.1.8.RELEASE</version>
5 </parent>

    而springboot的父项目又有一个父项目,此项目才是真正管理Spring Boot应用里面的所有依赖版本

1 <parent>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-dependencies</artifactId>
4     <version>2.1.8.RELEASE</version>
5     <relativePath>../../spring-boot-dependencies</relativePath>
6 </parent>

    以后导入依赖默认是不需要写版本(没有在dependencies里面管理的依赖自然需要声明版本号)

  2、SpringBoot的启动器

    spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件

1 <dependencies>
2     <!-- 不需要写版本号,版本号依赖父项目(spring-boot-starter-parent)管理 -->
3     <!-- SpringBoot 将所有的功能场景抽取出来,做成一个个starter(启动器),
4         只需要在项目中引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么启动器-->
5     <dependency>
6         <groupId>org.springframework.boot</groupId>
7         <artifactId>spring-boot-starter-web</artifactId>
8     </dependency>
9 </dependencies>

主程序类,主入口类

  1、主程序类,入口类

 1 /**
 2  * @SpringBootApplication 用来标注一个主程序,说明这是一个Spring Boot应用
 3  */
 4 @SpringBootApplication
 5 public class Application {
 6 
 7     public static void main(String[] args) {
 8 
 9         // Spring应用启动
10         SpringApplication.run(Application.class, args);
11     }
12 }    

  2、SpringBoot注解

     a、@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,

    SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;  

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

    b、@SpringBootApplication > @SpringBootConfiguration: Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类; 

    c、@SpringBootApplication > @SpringBootConfiguration > @Configuration: 配置类上来标注这个注解; 配置类 ----- 配置文件; 配置类也是容器中的一个组件;@Component

    d、@SpringBootApplication > @EnableAutoConfiguration: 开启自动配置功能; Spring配置的东西,SpringBoot开启自动配置功能;这样自动配置才能生效;

1 @Target(ElementType.TYPE)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Documented
4 @Inherited
5 @AutoConfigurationPackage
6 @Import(AutoConfigurationImportSelector.class)
7 public @interface EnableAutoConfiguration {

    e、@SpringBootApplication > @EnableAutoConfiguration > @AutoConfigurationPackage: 自动配置包

    f、@SpringBootApplication > @EnableAutoConfiguration > @AutoConfigurationPackage > @Import(AutoConfigurationPackages.Registrar.class): Spring的底层注解@Import,给容器中导入一个组件;导入的组件由 AutoConfigurationPackages.Registrar.class;

      将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;         

    g、@SpringBootApplication > @EnableAutoConfiguration > @Import(EnableAutoConfigurationImportSelector.class); 选择要导入容器的组件,  

      EnableAutoConfigurationImportSelector: 导入哪些组件的选择器; 将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;

      会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件, 并配置好这些组件;

      

      有了自动配置类,免去了手动编写配置注入功能组件等的工作;SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

      Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值

      J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.1.8.RELEASE.jar;

  

猜你喜欢

转载自www.cnblogs.com/h--d/p/11986555.html