java autoconfig_SpringBoot之AutoConfig自动配置

news/2025/2/27 10:31:25

1. @XxxxAuto

在SpringBoot中有很多以XxxxAutoConfiguration注解,其实他的作用就是,自动配置当前模块要依赖的类

例如:

@EnableAutoConfiguration

就告诉SpringBoot需要加载那些类,spring-boot-1.5.1.RELEASE.jar/META-INF/spring.factories 在该文件中

2. @Enable

@SpringBootApplication其实也是有以下三个注解组成的

@EnableAutoConfiguration 自动依赖当前所有模块的配置类org/springframework/boot/spring-boot-autoconfigure/1.5.2.RELEASE/spring-boot-autoconfigure-1.5.2.RELEASE.jar!/META-INF/spring.factories

@ComponentScan 扫描class

@Configuration 配置

当我们不在启动类添加@EnableAutoConfiguration时候,我们要自定义要依赖的模块,就要使用

@EnableAsync

@EnableScheduling

@EnableWebMVC

@EnableConfigurationProperties

@EnableJpaRepositories

@EnableTransactionManagement

@EnableCaching

其实@EnableAutoConfiguration这个注解,都是从自己的模块中查询spring.factories文件,

所以当应用启动就加载spring-boot-autoconfigure中的Spring.factories

代码中是

1

2

3

4

5

6

7

8

9

10类:AutoConfigurationImportSelector

方法:public String[] selectImports(AnnotationMetadata annotationMetadata)

AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader)

public static AutoConfigurationMetadata loadMetadata(ClassLoader classLoader) {

return loadMetadata(classLoader, "META-INF/spring-autoconfigure-metadata.properties");

}

具体的模块会导入不同的EnableConfigurationPropertiesImportSelector,然后复写selectImports方法,从当前类名中拿到包名+中依赖的信息,然后加载

1

2

3

4

5

6

7

8

9

10

11Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Import(AsyncConfigurationSelector.class)

public @interface EnableAsync {

Class extends Annotation> annotation() default Annotation.class;

boolean proxyTargetClass() default false;

AdviceMode mode() default AdviceMode.PROXY;

int order() default Ordered.LOWEST_PRECEDENCE;

}

生注册Bean或者是添加配置时候我们可以更加细化@ConditionalOnClass : classpath中存在该类时起效

@ConditionalOnMissingClass : classpath中不存在该类时起效

@ConditionalOnBean : DI容器中存在该类型Bean时起效

@ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效

@ConditionalOnSingleCandidate : DI容器中该类型Bean只有一个或@Primary的只有一个时起效

@ConditionalOnExpression : SpEL表达式结果为true时

@ConditionalOnProperty : 参数设置或者值一致时起效

@ConditionalOnResource : 指定的文件存在时起效

@ConditionalOnJndi : 指定的JNDI存在时起效

@ConditionalOnJava : 指定的Java版本存在时起效

@ConditionalOnWebApplication : Web应用环境下起效

@ConditionalOnNotWebApplication : 非Web应用环境下起效

执行顺序@AutoConfigureAfter:在指定的配置类初始化后再加载

@AutoConfigureBefore:在指定的配置类初始化前加载

@AutoConfigureOrder:数越小越先初始化

自定义Conditional约束类1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25public class ConditionalOtoSaasApplication extends SpringBootCondition{

@Override

public ConditionOutcome getMatchOutcome(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {

Object name = annotatedTypeMetadata.getAnnotationAttributes(ConditionalOnMyProperties.class.getName()).get("name");

conditionContext.getEnvironment();

if (((String) name).equalsIgnoreCase("test")) {

return new ConditionOutcome(true, "get name properties");

}

return new ConditionOutcome(false, "no get name properties");

}

}

@Target({ElementType.TYPE, ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Conditional(ConditionalOtoSaasApplication.class)

public @interface ConditionalOnMyProperties {

String name();

}

@Configuration

@ConditionalOnMyProperties(name = "test")

public class BlmConfig{

private String url;

private String name;

}

如果您觉得文章对你有用,可以赏我一杯咖啡

d367ccebea330889099c3300608b6a70.png

分享

新浪微博

微信

QQ空间

QQ好友

豆瓣

有道云笔记

取消


http://www.niftyadmin.cn/n/2010275.html

相关文章

@manytomany 保存后数据被删除_Smartbi V9数据挖掘完整介绍

Smartbi Mining平台是一个注重于实际生产应用的数据分析预测平台,它旨在为个人、团队和企业所做的决策提供预测。该平台不仅可为用户提供直观的流式建模、拖拽式操作和流程化、可视化的建模界面,还提供了大量的数据预处理操作。此外,它内置了…

php 如何跳转回前一个页面_PHP页面跳转到另一个页面的方法

PHP页面跳转到另一个页面的方法PHP页面跳转到另一个页面的方法是PHP学习当中必须掌握的,下面小编给大家整理了PHP页面跳转到另一个页面的方法,一起来学习吧!PHP页面跳转到另一个页面的方法一、用HTTP头信息也就是用PHP的header函数。PHP里的h…

js和php能生成一样的随机数_JS实现去重的随机数生成

这次给大家带来JS实现去重的随机数生成,JS实现去重随机数生成的注意事项有哪些,下面就是实战案例,一起来看一下。1.实验前准备:Math函数的理解数组方法的理解2.实验操作:随机数生成body{font-size: 20px;}#box{border:3px solid #…

uNo面板L灯一直闪_LED智能互联办公室照明恒流调光IC芯片无频闪H5114 - 信息发布 - 电子工程世界...

H5114 --【方案名称:LED智能互联办公室照明恒流调光IC芯片无频闪H5114】关键词:办公照明,无频闪,智能调光调色,智能照明,高辉度,65536:1调光比,共阳极,调光深…

ac 200调气软件_10.28更新 | 【V100R019C10】云管理配套设备及软件版本(Agile ControllerCampus控制器)...

本文提供华为云管理网络CloudCampus中小型园区网络解决方案——V100R019C10版本控制器侧的设备及软件版本查询,企业和伙伴可在网络工程规划、部署前参考本文,保证方案使用正确性。‍‍‍云AP配套关系表产品系列产品款型配套的软件版本WA系列Fit AP&#…

K折-交叉验证

k-折交叉验证(k-fold crossValidation):在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试&…

php电商开源框架,Fecshop是基于php Yii2框架之上开发的一款优秀的开源电商系统

1.6.0.0经过了一个月左右的时间,进行了一系列的开发和调整,fecshop后台部分进行了底层调整,加入了RBAC权限控制, 加入了多语言,加入了csrf(跨站请求伪造),防范csrf攻击,增强安全性,前…

C++和Rust_【译文】为什么说Rust是机器人技术的未来

原文:Why Rust is the future of robotics作者:Pierre RouanetRust是一门比较新的编程语言,在2006年由Graydon Hoare启动,2010年由Mozilla正式发布。速度极快的火狐量子浏览器就是用Rust开发的。过去几年里,Rust凭借着…