@Bean
@ConditionalOnBean(MultipartResolver.class)
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
public MultipartResolver multipartResolver(MultipartResolver resolver) {
// Detect if the user has created a MultipartResolver but named it incorrectly
return resolver;
}
- 如果容器中存在MultipartResolver类型的对象,生效
- 如果容器中不存在dispatcherServlet这个常量中的名字的话生效。
- 所以该方法如果生效的话是帮我们在容器中直接重新注入了名称为 dispatcherServlet的MultipartResolver类型的对象。
作用:防止有些人员在写的时候,配置的名称不统一的问题。
SpringBoot默认会在底层配好所有的组件,但是如果用户自己配置了以用户的优先
@Bean
@ConditionalOnMissingBean
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(Encoding.Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(Encoding.Type.RESPONSE));
return filter;
}
总结:
- SpringBoot先加载所有的自动配置类
- 每个自动配置类按照条件进行生效,默认都会绑定配置文件制定的值。xxxxProperties里面拿。xxxxProperties和配置文件application.properties配置文件进行绑定
- 生效的配置类就会给容器中装配很多组件
- 只要容器中有这些组件,相当于这些功能就有了
- 定制化配置
- 用户直接自己@Bean替换底层的组件
- 用户去看这个组件是获取的配置文件什么值就去修改
xxxxxAutoConfiguration—->组件——>xxxxProperties里面拿值——>application.properties拿值