关于SpringBoot自定义条件注解与自动配置.docx

关于SpringBoot自定义条件注解与自动配置.docx

关于SpringBoot自定义条件注解与自动配置

目录自定义条件注解自定义自动配置SpringBoot的核心功能就是为整合第三方框架提供自动配置,而本文则带着大家实现了自己的自动配置和Starter,一旦真正掌握了本文的内容,就会对SpringBoot产生一览众山小的感觉。

自定义条件注解

在SpringBoot中,所有自定义条件注解其实都是基于@Conditional而来的,使用@Conditional定义新条件注解关键就是要有一个Condition实现类,该Condition实现类就负责条件注解的处理逻辑,该实现类所实现的matches()方法决定了条件注解的要求是否得到满足。

下面是自定义条件注解的Condition实现类的代码。

src/main/java/com/example/_003configtest/condition/MyCondition.java

packagecom.example._003configtest.condition;

importcom.example._003configtest.annotation.ConditionalCustom;

importorg.springframework.context.annotation.Condition;

importorg.springframework.context.annotation.ConditionContext;

importorg.springframework.core.env.Environment;

importorg.springframework.core.type.AnnotatedTypeMetadata;

importjava.util.Map;

publicclassMyConditionimplementsCondition{

@Override

publicbooleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata){

//获取@ConditionalCustom注解的全部属性,其中ConditionalCustom是自定义的注解

MapString,ObjectannotationAttributes=metadata.getAnnotationAttributes(ConditionalCustom.class.getName());

//获取注解的value属性值

String[]vals=(String[])annotationAttributes.get(value);

//env是perties或application.yml中配置的属性

Environmentenv=context.getEnvironment();

//遍历每个value的每个属性值

for(Stringval:vals){

//如果某个属性值对应的配置属性不存在,则返回false

if(env.getProperty(val.toString())==null){

returnfalse;

returntrue;

}

从上面的逻辑可以看到,自定义条件注解的处理逻辑比较简单:就是要求value属性所指定的所有配置属性必须存在,至于这些配置属性的值是什么无所谓,这些配置属性是否有值也无所谓。

有了上面的Condition实现类之后,接下来即可基于@Conditional来定义自定义条件注解。下面是自定义条件注解的代码。

src/main/java/com/example/_003configtest/annotation/ConditionalCustom.java

packagecom.example._003configtest.annotation;

importcom.example._003configtest.condition.MyCondition;

importorg.springframework.context.annotation.Conditional;

importjava.lang.annotation.*;

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

@Retention(RetentionPolicy.RUNTIME)

@Documented

//只要通过@Conditional指定Condition实现类即可,该Conditio

文档评论(0)

1亿VIP精品文档

相关文档