springboot自动装配原理

springboot自动配置的原理

加载主配置类,开启自动配置功能@EnableAutoConfiguraion

利用

AutoConfigurationImportSelector

给容器导入一些组件。

 

获取所有候选的配置

List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
 

 

getCandidateConfigurations这个方法内部
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
				getBeanClassLoader());
		Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}
SpringFactoriesLoader.loadFactoryNames

扫描所有jar包下的META-INF/spring.factoryies ,把扫描到的这些文件内容包装成properties对象

public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

从properties中获取到EnableAutoConfiguraion.class类(类名对应的值),然后添加到容器中

以这个配置类做解释

#表明这个类是一个配置类

@Configuration(proxyBeanMethods = false):

¥开启ConfigurationProperties注解将ServerProperties类中的属性和配置文件中的值进行绑定

@EnableConfigurationProperties(ServerProperties.class)

#根据不同的条件进行判断,如果满足条件才会生效 ,@Conditionalspring底层注解,根据不同的条件,如果满足指定的条件,整个配制类中的配置就会生效.


#判断当前是否是web应用,如果是,当前配置类生效
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)



#判断当前项目有没有这个类 CharacterEncodingFilter springmvc解决乱码的过滤器 
@ConditionalOnClass(CharacterEncodingFilter.class) 

#判断配置文件中是否存在某个配置 server.servlet.encoding.enabled是否存在,如果不存在,判断也是成立的。

@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值