依赖管理
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