SpringBoot学习(一)--SpringBoot配置

一、SpringBoot配置

一.@Bean

创建BEAN实例,默认返回Bean为方法名。

    @Bean
    public RequestInterceptor requestInterceptor()
    {
        return new FeignRequestInterceptor();
    }

二.启动指定profile

1、命令行方式

--spring.profiles.active=dev

在这里插入图片描述

2、虚拟机参数

-Dspring.profiles.active=dev

在这里插入图片描述

三.加载配置文件顺序

优先级由高到低,优先加载高的。

//项目目录下
-file:/config/

-file:./
//resources目录下
-classpath:/config/

-classpath:/

四.加载外部配置顺序(只写常用的)

  1. 命令行参数(一般也不用,因为参数比较多)
  2. java的jar包外部的配置文件(带Spring.profile如:application-dev.properties)
  3. java的jar包内部的配置文件(带Spring.profile如:application-dev.properties)
  4. java的jar包外部的配置文件(application-.properties,最常用)
  5. java的jar包外部的配置文件(application.properties)

五.SpringBoot自动配置原理

1、自动配置原理

SpringBoot启动的时候加载主配置类,开启自动配置功能。@SpringBootApplication注解中的@EnableAutoConfiguration

1.@EnableAutoConfiguration的作用

将类路径下META-INF/spring.factories里面配置的所有EnableAutoConfiguration的值加入到容器中

//扫描所有jar包下的META-INF/spring.factories,把扫描到的这些文件内容包装成properties文件,从properties文件中获取到
	List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);

案例

# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener

# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition
2.以HttpEncodingAutoConfiguration为例解释自动配置原理
@Configuration//配置类,可以给容器添加组件
@EnableConfigurationProperties(HttpProperties.class)//启用指定类的ConfigurationPropertes功能,并和当前类进行绑定
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)//Spring底层@conditional注解,根据不同的条件,判断配置类中的配置是否生效。
@ConditionalOnClass(CharacterEncodingFilter.class)//判断当前项目中有没有这个类
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {

	private final HttpProperties.Encoding properties;

    //只有一个有参构造器的情况下,参数的值会从容器中拿。---这块还不是很明白
	public HttpEncodingAutoConfiguration(HttpProperties properties) {
		this.properties = properties.getEncoding();
	}

	@Bean//给容器中添加一个组件,这个组间中某些值需要从properties文件中获取。
	@ConditionalOnMissingBean//条件判断
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	}
...
(1).@EnableConfigurationProperties(HttpProperties.class)启用指定类的ConfigurationPropertes功能

总结:所有在配置文件中能配置的属性都是咋XXXProperties类中封装着

//部分代码
@ConfigurationProperties(prefix = "spring.http")//从配置文件中获取指定的值进行绑定
public class HttpProperties {
	/**
	 * Whether logging of (potentially sensitive) request details at DEBUG and TRACE level
	 * is allowed.
	 */
	private boolean logRequestDetails;
	/**
	 * HTTP encoding properties.
	 */
	private final Encoding encoding = new Encoding();
(2).@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)条件判断

Spring底层@conditional注解,根据不同的条件,判断配置类中的配置是否生效

(3).@ConditionalOnClass(CharacterEncodingFilter.class)条件判断

CharacterEncodingFilter.class是SpringMVC中进行乱码解决的过滤器

(4).@ConditionalOnProperty(prefix = “spring.http.encoding”, value = “enabled”, matchIfMissing = true)条件判断

判断配置文件中是否存在某个配置,此处为spring.http.encoding,如果不存在,判断也是成立的,即即使没有spring.http.encoding也是默认生效的。

2、细节

1.@Conditional派生注解(Spring注解版原生的@Conditional作用)

根据不同的条件判断,决定当前配置类是否生效。

2.扩展

在这里插入图片描述

3、怎么看那些配置类是否生效

开启SpringBoot的DEBUG模式,控制台自动打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值