SpringBoot精通-自定义Condition注解(系列一)

1,747 阅读2分钟

Solomon_肖哥弹架构 跟大家“弹弹” SpringBoot 的整体设计方案与核心功能点,那么今天来看自定义Condition怎么定义与运行,通常用于特定的特殊条件场景。 欢迎 点赞,点赞,点赞。 关注本人的公众号Solomon肖哥弹架构获取更多的惊喜

Conditional

@Conditional是SpringFramework的核心判断功能,SpringBoot在它的基础上定义了@ConditionalOnClass,@ConditionalOnProperty一系列的注解来实现更丰富的执行判断。

自定义condition注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Conditional(SolomonPropertyCondition.class)
public @interface ConditionalOnSolomon {

    /**
     * 业务键
     */
    String key();

    /**
     * 业务键
     */
    String value();
}

自定义Condition类

创建CSolomonPropertyCondition类并且实现Condition,判断注解内的value值等于Solomon返回true,否则返回false

public class SolomonPropertyCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

        Map<String, Object> attributes = metadata.getAnnotationAttributes(ConditionalOnSolomon.class.getName());

        String propertyName = String.valueOf(attributes.get("key"));

        String propertyValue = String.valueOf(attributes.get("value"));

        return "Solomon".equals(propertyValue);
    }
}

运行自定义Condition

public class ConditionalSolomonBootstrap {

	//创建字符串Bean,且属性值为Solomon则创建
    @Bean
    @ConditionalOnSystemProperty(key = "http://www.xiaoailiang.com", value = "Solomon")
    public String CreateSolomon() {
        return "Solomon ";
    }

    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(ConditionalSolomonBootstrap.class)
                .web(WebApplicationType.NONE)
                .run(args);
        // 通过名字获取String类型的Bean
        String solomonBeanName = context.getBean("Solomon", String.class);
		// 打印Bean名字
        System.out.println(solomonBeanName);

        // 关闭上下文
        context.close();
    }
}

关注&点赞 肖哥 后续讲解,SpringBoot 自定义启动Logo的实现方案

你的点赞与关注 是 Solomon_肖哥弹架构持续的动力。

历史热点文章