案例说明
通过前面案例可以很明显感受到,SpringBoot除了做了依赖管理,还帮我们做了一些常规的配置,下面举例详细说明。
tomcat
项目可以直接启动,不需要任何配置,通过上一节发现引入了启动器中引入了spring-boot-starter-tomcat。
使用tomcat的都知道,在使用tomcat时至少都需要对端口进行配置,但这里我们没有配置,说明spring-boot-starter-tomcat已帮我们自动配置,后续会详细介绍。
Springmvc
同样的,引入了spring-webmvc。一般来说我们使用SpringMVC肯定是要配置DispacherServlet的,这里同样也没有配置,说明也为我们进行了自动配置。这里我们可以直接通过ApplicationContext对象获取ioc容器中的bean对象。
public static void main(String[] args) {
//1、返回我们IOC容器
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//2、查看容器里面的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
在控制台输出中很容易找到dispacherServlet
其他常见web配置
比如characterEncodingFilter、viewResolver、multipartResolver等都可以在上述容器中看到相关对象,此处不一一举例,几乎涵盖了所有web开发常见的配置。
配置属性
上述说明了,SpringBoot能够帮我们进行自动配置,前提是我们使用其提供的默认属性,如果属性不一致,应该如何修改?例如tomcat端口要改为8888等。Spring官方提供了一些通用的属性配置说明。
即我们在application.properties文件或者application.yaml中可以进行设定。
实际中更常用的是application.yml文件。
上述端口设定如图,只需要在application.properties中根据官方文档进行设置:
通过点击properties文件中的属性可以跳转到org.springframework.boot.autoconfigure.web.ServerProperties类,其中包含了所有内置属性
org.springframework.boot.autoconfigure.web包下的其他包中都有对应的properties类,这些类都被@ConfigurationProperties标注,可以看出application配置文件中的配置实际是与org.springframework.boot.autoconfigure包中@ConfigurationProperties标注的类中的属性对应的。
@ConfigurationProperties
从上面的例子也可以看出。该注解标注在类上,可以读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用。
package com.test.boot.bean;
import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
*/
@ToString
@Data
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String brand;
private Integer price;
}
@EnableConfigurationProperties
通常用在@Configuration类上,用于启用特定配置属性类的绑定功能。任何被@ConfigurationProperties
注解的beans将自动被Environment属性配置。这个注解通常与SpringApplication的外部YAML配置配合使用,以便于管理和应用配置属性。
package com.test.boot;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@SpringBootApplication
@EnableConfigurationProperties(Car.class)
public class MainApplication {
...
}
可以这么理解,在此例子中:
@EnableConfigurationProperties(Car.class)
等于
@Component
@ConfigurationProperties(prefix = "mycar")
从Spring Boot 2.2开始,推荐使用@ConfigurationPropertiesScan
来代替@EnableConfigurationProperties
,因为后者已经被标记为过时。
@SpringBootApplication
整个SpringBoot案例除了controller,只对pom和启动类进行了编写。前面主要介绍了pom相关修改,引入了依赖管理和自动配置的概念,后面主要对启动类中@SpringBootApplication注解进行分析,逐步深入自动配置原理。