您的位置:

Spring Boot @ConfigurationProperties注解如何使用

一、简介

Spring Boot是一个基于Spring框架的快速开发的框架。在Spring Boot中,我们可以使用@ConfigurationProperties注解快速对配置文件进行读取操作。@ConfigurationProperties注解可以将配置文件中的属性进行绑定,并且可以通过@Bean注解的方式进行注入。在使用@ConfigurationProperties注解的时候,需要注意以下几点:

1、使用@ConfigurationProperties注解的类必须被@Service、@Component或者@Configuration等注解修饰。

2、被@ConfigurationProperties注解修饰的属性必须有get和set方法。

3、被@ConfigurationProperties注解修饰的类在Spring容器中必须是单例的。

二、使用@ConfigurationProperties注解

对于常规的JavaBean,我们需要手动对每一个属性进行赋值。而使用@ConfigurationProperties注解可以使我们更方便地管理配置文件。

以下是一个使用@ConfigurationProperties注解的例子:

@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoConfig {
    private String name;
    private int age;
    
    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;
    }
    
    @Bean
    public DemoService demoService() {
        return new DemoService();
    }
}

在上述代码中,我们使用@ConfigurationProperties注解对前缀为"demo"的属性进行了绑定,同时将DemoConfig类注册到Spring容器中,使其可以被注入到其他的类中。在方法中使用@Bean注解声明了DemoService类,使其也可以被注入到其他的类中。

在配置文件中,我们可以这样配置:

demo.name=test
demo.age=18

这样,在其他的类中,我们就可以像这样注入DemoConfig和DemoService:

@Service
public class DemoService2 {
    @Autowired
    private DemoConfig demoConfig;

    @Autowired
    private DemoService demoService;
}

在上述代码中,我们通过@Autowired注解将DemoConfig和DemoService注入到了DemoService2类中。

三、属性注入方式

在使用@ConfigurationProperties注解的时候,可以通过不同的方式对属性进行注入。

1、使用构造函数

在使用@ConfigurationProperties注解的时候,可以通过构造函数的方式进行注入:

@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoConfig {
    private String name;
    private int age;
    
    public DemoConfig(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

在上述代码中,我们使用构造函数的方式对属性进行了注入。在Spring Boot 2.2以后的版本中,我们无需使用@Autowired注解进行自动注入,而是可以直接在构造函数中使用属性。

2、使用setter方法

除了使用构造函数之外,我们还可以使用setter方法对属性进行注入。

@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoConfig {
    private String name;
    private int age;
    
    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;
    }
}

在上述代码中,我们使用setter方法对属性进行了注入。这种方式也是比较常见的一种方式。

3、使用字段注入

除了使用构造函数和setter方法之外,我们还可以使用字段注入的方式进行属性注入。如下所示:

@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoConfig {
    private String name;
    private int age;
}

在上述代码中,我们直接将属性定义在类的顶层,通过@ConfigurationProperties注解完成属性的注入。这种方式的代码最简洁,但是不够灵活。

四、多个配置文件的情况下的使用方式

在实际开发中,我们经常需要使用多个配置文件。此时,我们可以通过以下的方式对属性进行注入:

@Configuration
@PropertySources({
    @PropertySource(value = "classpath:demo.properties"),
    @PropertySource(value = "file:/opt/demo/demo.properties", ignoreResourceNotFound = true)
})
@ConfigurationProperties(prefix = "demo")
public class DemoConfig {
    private String name;
    private int age;
}

在上述代码中,我们通过@PropertySource注解指定了多个配置文件的路径。Spring会依次读取这些配置文件,并且将属性进行注入。

五、总结

本文主要针对Spring Boot中@ConfigurationProperties注解的使用进行了详细的讲解。@ConfigurationProperties注解可以帮助我们更方便地管理配置文件,提高代码的可读性和可维护性。在使用@ConfigurationProperties注解的时候,需要注意类修饰符、属性的get和set方法、类需要是单例的等几个方面。同时,在实际开发中,我们可能还会使用多个配置文件,此时可以通过指定多个配置文件的路径来完成属性的注入。