一、简介
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方法、类需要是单例的等几个方面。同时,在实际开发中,我们可能还会使用多个配置文件,此时可以通过指定多个配置文件的路径来完成属性的注入。