【Spring Boot实战与进阶】条件注解@Conditional的使用

简介: 条件注解@Conditional的使用
Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用。这个专栏将对Spring Boot框架从浅入深,从实战到进阶,不但我们要懂得如何去使用,还要去剖析框架源码,学习其优秀的设计思想。

汇总目录链接:【Spring Boot实战与进阶】学习目录

  Spring Boot 是根据配置文件中的内容,决定是否创建 bean,以及如何创建 bean 到 Spring 容器中,而 Spring boot 自动化配置的核心控制,就是 @Conditional 注解。

1、新建EncodingConverter接口,以及两个实现类

public interface EncodingConverter {
}
public class GBKEncodingConverter implements EncodingConverter {
}
public class UTF8EncodingConverter implements EncodingConverter {
}

2、GBKCondition类

public class GBKCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if ("gbk".equals(encoding.toLowerCase())) {
            return true;
        }
        return false;
    }
}

3、UTF8Condition类

public class UTF8Condition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if ("utf-8".equals(encoding.toLowerCase())) {
            return true;
        }
        return false;
    }
}

4、EncodingConverterConfig配置类

@SpringBootConfiguration
public class EncodingConverterConfig {

    @Bean
    @Conditional(UTF8Condition.class)
    public EncodingConverter createUTF8Converter() {
        return new UTF8EncodingConverter();
    }

    @Bean
    @Conditional(GBKCondition.class)
    public EncodingConverter createGBKConverter() {
        return new GBKEncodingConverter();
    }
}

5、BootConditionConfigApplication类

@SpringBootApplication
public class BootConditionConfigApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(BootConditionConfigApplication.class, args);
                
        //获取该接口所有实现类的Bean
        Map<String, EncodingConverter> beansOfType = context.getBeansOfType(EncodingConverter.class);
        System.out.println(beansOfType);
        System.out.println(System.getProperty("file.encoding"));

        context.close();
    }
}

6、控制台输出

{createUTF8Converter=com.boot.condition.bootconditionconfig.converter.UTF8EncodingConverter@263f04ca}
UTF-8
相关文章
|
8天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
34 3
|
6天前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
8天前
|
存储 缓存 Java
【JavaEE】Spring中注解的方式去获取Bean对象
【JavaEE】Spring中注解的方式去获取Bean对象
3 0
|
8天前
|
存储 Java 对象存储
【JavaEE】Spring中注解的方式去存储Bean对象
【JavaEE】Spring中注解的方式去存储Bean对象
10 0
|
8天前
|
XML Java 应用服务中间件
【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
12 0
|
8天前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
19 2
|
8天前
|
JSON 前端开发 Java
【JAVA进阶篇教学】第七篇:Spring中常用注解
【JAVA进阶篇教学】第七篇:Spring中常用注解
|
Java Linux Windows
Spring注解(四):@Conditional根据条件注册组件
在进行spring注解开发时,如果对于某个bean生成了多个实例,在进行组件注册的时候会全部注入到IOC的容器当中,比如:
138 0
Spring注解(四):@Conditional根据条件注册组件
|
8天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
65 0
|
8天前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
143 0