Spring修改配置的方式有以下几种:
1.修改配置文件
首先清楚直接能在SpringBoot配置文件中修改的属性,必须是自动配置类绑定在配置文件类中的属性。如果自动配置类根本就没有绑定配置文件类,那么SpringBoot配置文件中无法直接修改。
2.自定义组件
绑定了配置类的依赖类可以直接去通过配置文件修改,但是有些依赖类并没有绑定配置文件类,这样就不能通过SpringBoot的配置文件去直接修改配置。除了一些最最基础的依赖类以外,SpringBoot中所有功能组件基本上都没有将配置文件抽为配置文件类,而是通过先扫描IOC中有没有用户自定义的功能组件,如果没有再注入默认的进IOC这种机制来实现。如果用户需要修改功能组件层面的配置,需要用户通过@configuration和@Bean两个注解来收入注入一个Bean到IOC中。(比如SpringMVC中的各种器,视图解析器、格式化器等等)
修改配置文件的原理在《手撕JAVA(八)详解SpringBoot自动配置源码》一文已经做了讨论,此处介绍一下如何自定义组件来达到修改配置的目的:
此处以修改SpringMVC的配置为例
SpringMVC的配置类在:WebMvcAutoConfiguration类中。
能在SpringBoot的配置文件中直接修改的配置,是必须写在配置文件类中的属性。但大多数功能组件都没有绑定配置文件类,需要用户自己向IOC中注册,如果不注册,SpringBoot会向IOC中注册一个默认的Bean。SpringMVC所有功能组件都是这样。
方法一:
@Configuration+@Bean
方法二:WebMvcConfigurer接口
值得注意的是新版本的SpringBoot,对于每一大类的组件专门给开发者提供了XXXConfigurer接口,来统一修改配置,这样比单个注册效率要高的多。