二、Spring Boot的两大重要机制
1. 依赖管理机制
- 开发什么场景,导入什么场景启动器,场景启动器自动把这个场景的所有核心依赖全部导入进来。
- maven依赖传递原则:A依赖B,B依赖C,则A就拥有B和C。
- 每个boot项目都有一个父项目
spring-boot-starter-parent
,parent的父项目是spring-boot-dependencies
。 - 父项目版本仲裁中心,把所有常见的jar的依赖版本都声明好了。如果要自定义版本号,利用maven的就近原则,直接在当前项目
properties
标签中声明父项目用的版本属性,或者直接在导入依赖的时候声明版本。 -
对于第三方的jar包,boot父项目没有管理的需要自行声明好
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.16</version> </dependency>
2. 自动配置机制
- 自动配置的 Tomcat、SpringMVC 等,导入场景,容器中就会自动配置好这个场景的核心组件。
- 默认的扫包规则:
@SpringBootApplication
标注的类就是主程序类,SpringBoot只会扫描主程序所在的包及其下面的子包,自动的component-scan功能。 - 自定义扫描包路径:
@SpringBootApplication(scanBasePackages = "com.circle")
@ComponentScan("com.circle")
// ioc 容器
ConfigurableApplicationContext ioc = SpringApplication.run(MainApplication.class,args);
//1、获取容器中所有组件的名字
String[] names = ioc.getBeanDefinitionNames();
//2、挨个遍历:
// dispatcherServlet、beanNameViewResolver、characterEncodingFilter、multipartResolver
// SpringBoot把以前配置的核心组件现在都给我们自动配置好了。
for (String name : names) {
System.out.println(name);
}
- 按需加载自动配置:
导入场景spring-boot-starter-web
,场景启动器除了会导入相关功能依赖,导入一个spring-boot-starter
,是所有starter
的starter
,基础核心starter。spring-boot-starter
导入了一个包 spring-boot-autoconfigure,
包里面都是各种场景的AutoConfiguration
自动配置类。虽然全场景的自动配置都在 spring-boot-autoconfigure
这个包,但是不是全都开启的。导入哪个场景就开启哪个自动配置。