栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot 自动装配原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot 自动装配原理

springboot 与spring相比实现了将配置类自动加载的功能,省去了配置xml的繁琐的步骤。

@SpringBootApplication 注解表示了这是一个springboot应用,可以将springboot的配置自动加载

查看@SpringBootApplication的源码如下图:

文档中说声明@SpringBootApplication是方便的,相等于声明了以下3个注解

@SpringBootConfiguration # springboot配置
@EnableAutoConfiguration # 自动配置
@ComponentScan # 组件扫描

@SpringBootConfiguration:@SpringBootConfiguration 包括了@Configuration,一个有@Configuration注解的类,可以用作为spring 的标准的注解,配置了@Configuration注解的类可以被spring框架发现

 

@EnableAutoConfiguration: spring 的上下文试着去猜需要哪些配置,并且智能的加载,需要满足一些条件比如:

@ConditionalOnBean // 当给定的在bean存在时,则实例化当前Bean,这个bean可能由于某种原因而没有注册到ioc里,这时@ConditionalOnBean可以让当前bean也不进行注册@ConditionalOnMissingBean // 当给定的在bean不存在时,则实例化当前Bean,感觉这个是在多态环境下使用,当一个接口有多个实现类时,如果只希望它有一个实现类,那就在各个实现类上加上这个注解@ConditionalOnClass // 当给定的类名在类路径上存在,则实例化当前Bean@ConditionalOnMissingClass // 当给定的类名在类路径上不存在,则实例化当前Bean@AutoConfigurationPackage 添加该注解的类所在的package 作为 自动配置package 进行管理,运行测试代码,可以看到自动配置的package为 com.example.demo

@import(AutoConfigurationimportSelector.class) 引入AutoCofnigurationimportSelector类

 AutoConfigurationimportSelector —> SpringFactoriesLoader.loadFactoryNames—>loadSpringFactories—>FACTORIES_RESOURCE_LOCATION = "meta-INF/spring.factories"

可以从上面代码看出,springboot从 spring-boot-autoconfigure-2.6.3.jar下面的meta-INF/spring.factories 加载配置

 

比如加载MongoDataAutoConfiguration 可以看到依赖的

@ConditionalOnClass({ MongoClient.class, MongoTemplate.class })

 MongoClient.class, MongoTemplate.class 这两个类爆红,不存在,因为我没有引入MongoDB依赖,@ConditionalOnClass表示引入的类都存在才会加载

 

@EnableConfigurationProperties(MongoProperties.class) 表示从MongoProperties 这个文件当中加载默认的MOGODB配置,如果条件成立的话。

 

org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,HTTP编码配置会被自动加载

 

 

 

 

  



@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {


	@AliasFor(annotation = Configuration.class)
	boolean proxyBeanMethods() default true;

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749327.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号