Spring框架注解读取配置文件
Spring提供了多种方式来读取配置文件,包括使用@Value
注解和@ConfigurationProperties
注解。
使用 @Value 注解
@Value
注解用于将配置文件中的单个属性值注入到Bean的字段、构造函数或方法参数中。
@Value
注解可以从application.properties
或 application.yml
文件中读取值。
1. application.properties
示例
1 2
| app.name=MyApp app.version=1.0.0
|
2. 读取 application.properties
中的值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;
@Component public class AppConfig {
@Value("${app.name}") private String appName;
@Value("${app.version}") private String appVersion;
```java public String getAppName() { return appName; }
public void setAppName(String appName) { this.appName = appName; }
public String getAppVersion() { return appVersion; }
public void setAppVersion(String appVersion) { this.appVersion = appVersion; } }
|
3. 使用配置值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
@Service public class AppService {
private final AppConfig appConfig;
@Autowired public AppService(AppConfig appConfig) { this.appConfig = appConfig; }
public void printAppInfo() { System.out.println("App Name: " + appConfig.getAppName()); System.out.println("App Version: " + appConfig.getAppVersion()); } }
|
使用 @ConfigurationProperties 注解
@ConfigurationProperties
注解用于将配置文件中的一组相关属性绑定到一个Java类上。
它适用于需要读取多个相关属性并将它们绑定到一个对象的情况。
1. application.yml
示例
1 2 3 4
| app: name: MyApp version: 1.0.0 description: This is my application
|
2. 创建配置属性类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration;
@Configuration @ConfigurationProperties(prefix = "app") public class AppProperties {
private String name; private String version; private String description;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getVersion() { return version; }
public void setVersion(String version) { this.version = version; }
public String getDescription()
```java public String getDescription() { return description; }
public void setDescription(String description) {
```java this.description = description; } }
|
3. 启用 @ConfigurationProperties 支持
确保在主应用程序类或配置类中启用 @ConfigurationProperties
支持。
1 2 3 4 5 6 7 8 9 10 11 12
| import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties;
@SpringBootApplication @EnableConfigurationProperties(AppProperties.class) public class Application {
public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
|
4. 使用配置属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
@Service public class AppService {
private final AppProperties appProperties;
@Autowired public AppService(AppProperties appProperties) { this.appProperties = appProperties; }
public void printAppInfo() { System.out.println("App Name: " + appProperties.getName()); System.out.println("App Version: " + appProperties.getVersion()); System.out.println("App Description: " + appProperties.getDescription()); } }
|
总结
@Value
注解适用于从配置文件中读取单个属性值,并将其注入到Bean的字段、构造函数或方法参数中。
@ConfigurationProperties
注解适用于从配置文件中读取一组相关属性,并将它们绑定到一个Java类上,从而更容易管理和使用这些属性。
这两种方式各有优劣,具体选择哪一种取决于你的需求。如果只是简单的单个属性注入,@Value
注解足够;如果需要读取并管理多个相关属性,@ConfigurationProperties
更为合适。