SpringBoot中配置绑定的三种方法(@ConfigurationProperties注解)

简介: SpringBoot中配置绑定的三种方法(@ConfigurationProperties注解)

properties配置文件如下:

human.name=Mr.Yu
human.age=21
human.gender=male

如何把properties里面的配置绑定到JavaBean里面,以前我们的做法如下:

public class PropertiesUtil {
     
    public static void getProperties(Person person) throws IOException {
     
        Properties properties = new Properties();
        properties.load(new FileInputStream("src/main/resources/demo.properties"));
        //得到配置文件key的名字
        Enumeration enumeration = properties.propertyNames();
        while (enumeration.hasMoreElements()){
     
            String key =(String)enumeration.nextElement();
            String value = properties.getProperty(key);
            System.out.println("key="+key+"——————value="+value);
            //封装到JavaBean
            //以下内容省略
        }
    }
}

输出结果:

key=human.name——————value=Mr.Yu
key=human.age——————value=21
key=human.gender——————value=male

Process finished with exit code 0

可以看到这个过程十分繁杂,但是在SpringBoot中这个过程将会变得非常简单。
在SpringBoot中有如下3种方法:

1.@ConfigurationProperties注解+@Component(或@Controller或@Service或@Repository)注解

只有在容器中的组件,才会拥有SpringBoot提供的强大功能,也就是如果我们需要使用到@ConfigurationProperties注解,那么我们首先要保证该对JavaBean对象在IoC容器中,所以需要用到Component注解来添加组件到容器中。@ConfigurationProperties注解中prefix与value互相都是别名
在这里插入图片描述也就是说@ConfigurationProperties(value = "human")@ConfigurationProperties(prefix = "human")是一样的prefix和value指的是前缀的意思

代码测试:
properties配置文件:

human.name=Mr.Yu
human.age=21
human.gender=male

Person类:

@Component 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
@ConfigurationProperties(value = "human")
public class Person {
        
    public String name;
    public int age;
    public String gender;

    public Person() {
        
    }

    public Person(String name, int age, String gender) {
        
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        
        return name;
    }

    public void setName(String name) {
        
        this.name = name;
    }

    public int getAge() {
        
        return age;
    }

    public void setAge(int age) {
        
        this.age = age;
    }

    public String getGender() {
        
        return gender;
    }

    public void setGender(String gender) {
        
        this.gender = gender;
    }

    @Override
    public String toString() {
        
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

测试类如下:

//@Controller @ResponseBody以字符串的方式写给浏览器,而不是跳转到某个页面 //@ResponseBody //@RestController = @Controller + @ResponseBody @RestController public class HelloController {
          //自动注入属性 @Autowired Person person; @RequestMapping("/person") public Person getPerson(){
          return person; } } 

测试结果:
在这里插入图片描述

2.@ConfigurationProperties注解+@EnableConfigurationProperties注解

这种方式@EnableConfigurationProperties注解一定要在配置类上写,@EnableConfigurationProperties的意思是开启属性配置功能,开启谁的属性配置功能呢,因为我们上面的Person类想进行配置绑定,所以我们在后面加上参数Person.class:@EnableConfigurationProperties(Person.class)

@EnableConfigurationProperties(Person.class)的作用就是把这个Person组件注册到容器中,对象的名称为:human-com.ysw.boot.properties.Person 其中human是@ConfigurationProperties(value = “human”)中前缀value的值

在Person类上还是有@ConfigurationProperties注解,这种方式把Person类上的@Component注解换成了配置类上的@EnableConfigurationProperties(Person.class)注解
在这里插入图片描述
在这里插入图片描述
这种方式主要用在引用第三方包时,比如第三方包中有一个Person类,该类中没有使用@Component,我们也不能够给第三方包中的类加上@Component,这个时候就可以使用在配置类上加上@EnableConfigurationProperties注解的方法。

3.@ConfigurationProperties注解+@Import注解

使用@Import给容器中自动创建出这个类型的组件、默认组件的名字就是全类名@Import注解与2中的@ConfigurationProperties注解效果是一样的只不过他们注册到容器中的名称不同: @ConfigurationProperties注解注册到容器中对象的名称为:human-com.ysw.boot.properties.Person 其中human是@ConfigurationProperties(value = “human”)中前缀value的值@Import注解注册到容器中对象的名称为:com.ysw.boot.properties.Person

配置类:
在这里插入图片描述
Person类:
在这里插入图片描述
测试类:
在这里插入图片描述
application.properties文件:

server.port=8888 human.name=Mr.Yu human.age=21 human.gender=male222 

测试结果:
在这里插入图片描述

目录
相关文章
|
6月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
965 128
|
5月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
512 4
|
5月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
619 2
|
6月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
448 12
|
6月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1112 5
|
6月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
339 0
探索Spring Boot的@Conditional注解的上下文配置
|
SQL Java
springboot自定义注解收集操作日志
springboot自定义注解收集操作日志
468 0
springboot自定义注解收集操作日志
|
SQL Java
springboot高级功能(四)业务实战,自定义注解收集操作日志
springboot高级功能(四)业务实战,自定义注解收集操作日志
582 0
|
5月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。

热门文章

最新文章