首页 > 其他分享 >SpringBoot

SpringBoot

时间:2022-10-26 16:44:32浏览次数:60  
标签:依赖 优先级 SpringBoot 配置文件 spring boot 注解

依赖管理

SpringBoot项目里面有一个<parent>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
    </parent>

这个依赖还有一个<parent>

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.1.6.RELEASE</version>
  <relativePath>../../spring-boot-dependencies</relativePath>
</parent>
<artifactId>spring-boot-starter-parent</artifactId>

里面涵盖了开发会用到的绝大部分依赖,因此我们不必在为大部分依赖指明版本

如果有需要我们也可以在springboot项目里面指明需要用的依赖版本

 

每一个start启动器里面都会有一个底层依赖,这个依赖是自动装配的关键

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.4.5</version>
      <scope>compile</scope>
    </dependency>

自动配置

关于@SpringBootApplication

@SpringBootApplication里面包含了

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

@SpringBootConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

通过上面可以发现我们的核心启动类注解源码中含此注解,这个注解标注在某个类上,表示这是一个 Spring Boot的配置类。他的核心代码中,内部有一个核心注解@Configuration来表明当前类是配置类,并且可以被组件扫描器扫到,所以@SpringBootConfiguration与@Configuration具有相同作用,只是前者又做了一次封装。

@ComponentScan

扫描当前类所在包下的注解

@ EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

通过@Import注解的AutoConfigurationImportSelector这个类的selectImports()方法层层调用,以加载所有jar包下的MATE-INF/spring.factories文件(将之包装成properties类型),然后读取EnableAutoConfiguration对应的值,加载进容器,以完成自动配置的功能

 

对于@AutoConfigurationPackage和@ComponentScan,前者用于扫描第三方jar包依赖的注解,后者用于扫描@Component等注解

全局配置文件优先级

优先级:以下图顺序号代表配置文件的优先级,并且相同配置文件按顺序加载可以实现互补,但是不会被覆盖。

 

注意:Spring Boot 有application.properties 和 application.yaml 两种配置文件的方式,yaml是一种JSON超文本格式文件,如果是2.4.0之前版本,优先级properties>yaml;但是如果是2.4.0的版本,优先级yaml>properties。

 

 

 

 

 

 

 

 

.

标签:依赖,优先级,SpringBoot,配置文件,spring,boot,注解
From: https://www.cnblogs.com/happy12123/p/16822570.html

相关文章