学习springboot2的第3天(2021-12-02)07-基础入门-springboot的自动配置特性
自动配置
1、配置好了Tomcat
因为在依赖spring-boot-starter-web里面有:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
和
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
2、配置好了Spring MVC
同理:因为在依赖spring-boot-starter-web里面有:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
包的命名规范:
刚开始的一个HelloWorld的例子就不满足这个包的规范。
主程序所在的包(com.rtl.boot)
以及它下面的子包(com.rtl.boot.controller…)
里面所有的组件都会被默认扫描。
这就是为什么我们没有配置包扫描,但是写了@Controller注解,程序就会识别HelloController了。
这种就是默认情况。
但是也可以自己设置:
比如:
主程序:
com.rtl.boot.MainApplication
控制器类:
com.rtl.HelloController
默认情况,这个是扫描不到的。
因为HelloController组件不在主程序所在的包或者子包里面。
如果还是希望扫描到:
第一种方式:
这个注解加上一个属性:scanBasePackages
@SpringBootApplication(scanBasePackages = "com.rtl")
把范围扩大了,这个时候,就可以扫描到com.rtl.HelloController了
第二种写法:
因为主程序:com.rtl.boot.MainApplication
所以如果不写,单纯写一个注解的话:
@SpringBootApplication
等同于:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(“com.rtl.boot”)
所以我们也可以写注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(“com.rtl”)
各种默认的配置都是有默认值的。
默认配置最终都是映射到某一个类里面的。
这个类会在容器中创建对象。
这些自动配置项都是按需加载的。引入了哪些场景,这些场景的自动配置才会自动配置。
解释:(一步一步按住ctrl进去的)
因为我们引入了:spring-boot-starter-web
这个里面有基础:spring-boot-starter
这个里面有:spring-boot-autoconfigure
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>