应用分析
1、依赖管理机制
在springBoot项目中,导入starter-web所有想换依赖都会被导入,甚至不用去规定它们的版本号。它是根据Maven的依赖传递原则来设置,只需要导入场景启动器,场景启动器自动把这个场景的所有核心依赖全部导入。不去规定版本号的原因是:每个springBoot都有一个父项目
spring-boot-starter-parent
,parent的父项目spring-boot-dependencies
在其中声明了所有常见的jar包的依赖版本,如果想要自定义版本号,我们可以利用maven的就近原则,直接在当前项目添加properties
标签,在其中声明父项目版本属性的key,或直接在依赖内添加version
标签。
2、自动配置机制(初步理解)
①自动配置Tomcat、SpringMVC等
导入场景,容器中就会自动配置好这个场景的核心组件。
- 以前:DispatcherServlet、ViewResolver、CharacterEncodingFilter…
- 现在:自动配置完整
查看容器中有什么组件。
package com.louis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Boot302Application {
public static void main(String[] args) {
//java10:局部变量类型的自动推断
var ioc = SpringApplication.run(Boot302Application.class, args);
//1、获取容器中所有组件的名字
String[] names = ioc.getBeanDefinitionNames();
//2、遍历数组内容
for (String name : names) {
System.out.println(name);
}
}
}
②默认的包扫描规则
SpringBoot只会扫描主程序所在的包及其下面的子包,自动的component-scan功能。也可以自定义扫描路径:
-
法一:设置@SpringBootApplication的
scanBasePackage
属性设置,如:@SpringBootApplication(scanBasePackages = "com")
-
法二:观察@SpringBootApplication注解发现它是一个复合注解,可以使用
@ComponentScan("com")
注解设置扫描路径。
③配置默认值
配置文件的所有配置项是和某个类的对象值进行一一绑定的。
绑定了配置文件中每一项的类就叫做配置属性类。如:ServerProperties
绑定了所有Tomcat服务器有关的配置、MultipartProperties
绑定了所有与文件上传相关的配置…
④按需加载自动配置
场景启动器除了会导入相关功能依赖外,还会导入
spring-boot-starter
,它是基础核心starter,是所有starter的starter,在其中又导入了一个包spring-boot-autoconfigure
里面都是各种场景的autoconfigure
自动配置类,用来实现自动配置,虽然都在这个包中,但并不是全部都开启的。只有在导入了相关场景时才会开启相关自动配置。
总结:导入场景启动器,触发apring-boot-autoconfigure
这个包的自动配置生效,容器中就会具有相关场景的功能。