springboot自动配置原理
springboot自动配置原理
springboot自动配置原理自动配置:pom.xml 代码解读复制代码spring-boot-dependencies 核心依赖在父工程中
我们在写或者引入一些springboot依赖时,不需要指定版本,就因为有这些版本仓库
starter就是springboot的启动场景比如spring-boot-starter-web,他就会帮我们自动导入web
springboot自动配置原理
自动配置:
pom.xml
- 代码解读复制代码spring-boot-dependencies 核心依赖在父工程中
- 我们在写或者引入一些springboot依赖时,不需要指定版本,就因为有这些版本仓库
starter
- 就是springboot的启动场景
- 比如spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖
- springboot会将所有的场景都变成一个个的启动器
- 我们要使用什么功能,引入相应的启动器就可以了
主程序
- css 代码解读复制代码@SpringBootApplication 标注是一个springboot的应用
- less 代码解读复制代码@SpringBootConfiguration springboot的配置 @Configuration spring的配置类 @Component 说明这也是一个spring的组件 @EnableAutoConfiguration 开启自动配置 @AutoConfigurationPackage 自动配置包 @Import(AutoConfigurationPackages.) 导入选择器 @Import() 导入选择器 List<String> configurati = getCandidateConfigurati(annotationMetadata, attributes); 获取所有的配置
- typescript 代码解读复制代码//获取所有的配置 protected List<String> getCandidateConfigurati(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurati = SpringFactoriesLoader.loadFactoryames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()); (configurati, "o auto configuration classes found in META-IF/spring.factories. If you " + "are using a custom packaging, make sure that file is correct."); return configurati; } protected Class<?> getSpringFactoriesLoaderFactoryClass() { return ; }
- bash 代码解读复制代码META-IF/spring.factories 自动配置的核心文件
这个文件里放的全是自动配置类的名称,主程序启动时就通过注解将这些自动类配置类全部加载,有了这些配置类,就省去我们写配置文件
- java 代码解读复制代码为什么加载了很多自动配置类 一些生效了,一些没生效,以springmvc的自动配置类来示例: 下面这个是springmvc的自动配置类 @Configuration 表示这是一个配置类 @ConditionalOnClass 这个判断条件成立才会加载这个配置类,也就是说Servlet,DispatcherServlet存在才生效,我们建项目时导入mvc包那么这个配置类才生效 @ConditionalOnWebApplicatio 当前是个web程序时才生效 其他的配置类类似 都是在配置类上通过注解判断是否生效 @Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnClass({ , Dispatcher, }) @ConditionalOnMissingBean() @AutoConfigureOrder(Ordered.HIGHEST_PRECEDECE + 10) @AutoConfigureAfter({ , , }) public class WebMvcAutoConfiguration { public static final String DEFAULT_PREFIX = ""; public static final String DEFAULT_SUFFIX = ""; private static final String[] SERVLET_LOCATIOS = { "/" }; @Bean @ConditionalOnMissingBean() @ConditionalOnProperty(prefix = "hiddenmethod.filter", name = "enabled", matchIfMissing = false) public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { return new OrderedHiddenHttpMethodFilter(); }
- ini 代码解读复制代码springboot中redis的配置文件如下 spring.redis.host=127.0.0.1 spring.redis.port=679
我们可以通过@ConfigurationProperties 将它们注入到一个类中去,也可以用@value单个绑定,配置文件方式写更便捷,类过于麻烦,那这个配置文件中能写那些东西呢?
代码语言:javascript代码运行次数:0运行复制dart 代码解读复制代码这是redis的自动配置类
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass()
@EnableConfigurationProperties() 自动配置属性,以RedisProperties类为准
@Import({ , })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
代码语言:javascript代码运行次数:0运行复制arduino 代码解读复制代码这是RedisProperties类
可以看到@ConfigurationProperties,说明将配置文件的值注入进来,也可以看到前缀spring.redis 和redis的配置文件的一摸一样,如配置主机配置文件就可以写spring.redis.host="localhost",下面这个类host属性有个默认的值localhost,所以我们不在配置文件中配置redis的连接地址,你也能连上以本地的redis,所以你在配置文件里配置了springboot就用你的,你没配置就用配置类默认的,同理我们再配置其他属性时,都可以参考响应的配置类编写配置文件
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
/**
* Database index used by the connection factory.
*/
private int database = 0;
/**
* Connection URL. Overrides host, port, and password. User is ignored. Example:
* redis://user:password@example:679
*/
private String url;
/**
* Redis server host.
*/
private String host = "localhost";
总结:springboot自动配置可以理解为,springboot的主程序在运行时,通过@EnableAutoConfiguration开启自动配置,首先会去扫描META-IF/spring.factories下所有的自动配置类,有了这些配置类就省去我们写配置文件,通过@ConditionalXXX判断这些配置类是否应该生效,只要导入了对应的starter,自动配置就会生效,通过相对应配置类上的@EnableConfigurationProperties,加载相关配置属性,若配置文件中有的就用配置文件的,没有的就用默认提供的,这就是springboot的自动配置原理。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-21 00:40:45
下一篇:华为 HCIP
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 浙商银行网上银行 | 28分钟前 发表 |
所以我们不在配置文件中配置redis的连接地址 | |
本站网友 细辛脑说明书 | 3分钟前 发表 |
port | |
本站网友 首乌丸 | 29分钟前 发表 |
Dispatcher | |
本站网友 木瓜的营养价值 | 19分钟前 发表 |
这就是springboot的自动配置原理 |