package com.hang.springboot02config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springboot02ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot02ConfigApplication.class, args);
}
}
2.然后注解@SpringBootApplication中能找到配置源码位置,即:
@SpringBootApplication --@EnableAutoConfiguration:自动导入配置 @import(AutoConfigurationimportSelector.class):选择导入 --getAutoConfigurationEntry:自动获取一个候选配置 getCandidateConfigurations:获取一个候选配置 --getBeanClassLoader()); getSpringFactoriesLoaderFactoryC --return EnableAutoConfiguration.class; loadFactoryNames:加载一些配置 --Enumerationurls=classLoader.getResources(FACTORIES_RESOURCE_LOCATION); --public static final String FACTORIES_RESOURCE_LOCATION = "meta-INF/spring.factories":最后找到配置文件的地方
这里面:
3.配置文件中的内容有哪些?自动装配原理: xxxxconfiguration就是容器中的一个组件 加到容器中自动配置
Conditional: adj. 有条件的,有前提的;(从句)条件的 n. 条件从句;条件式
XxxxProperties.java中SpringBoot封装好的配置信息:
//说明这是配置类 XxxxxxProperties中找到能配置的东西和yaml中的一一绑定
@Configuration(proxyBeanMethods=false)
//自动配置属性 指定配置的类
@EnableConfigurationProperties(ServerProperties.class)
//spring的底层注解,根据不同的条件判断当前配置或者类是否能生效,就是能不能使用
//这个判断是不是web应用使用的
@ConditionalOnWebApplication(type=ConditionalOnWebApplication.Type.SERVLET)
//字符编码过滤器
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix="server.servlet.encoding",value="enabled",matchIfMissing=true)
publicclassHttpEncodingAutoConfiguration{
privatefinalEncodingproperties;
publicHttpEncodingAutoConfiguration(ServerPropertiesproperties){
this.properties=properties.getServlet().getEncoding();
}
@Bean
!!如果开头注释那没有配置信息就往下找当前的内部类,反正一定能找到
4. 配置原理- springboot启动会加载大量的自动配置类
- 使用的时候在springboot他写好的配置找那些功能代码
- 用他的配置能自动装配,没有的得自己手动配置
- 在容器中就是yaml中的配置添加组件的时候,自动从properties中获取这些配置
- 自动装配 封装好的属性
在yaml中添加
debug=true
运行可以在控制台看到用到的自动配置生效
- Positive matches:(自动配置类启用的:正匹配)
- Negative matches:(没有启动,没有匹配成功的自动配置类:负匹配)
- Unconditional classes: (没有条件的类)



