Spring框架注解读取配置文件

Spring提供了多种方式来读取配置文件,包括使用@Value注解和@ConfigurationProperties注解。


使用 @Value 注解

@Value 注解用于将配置文件中的单个属性值注入到Bean的字段、构造函数或方法参数中。

@Value 注解可以从application.propertiesapplication.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;

// getters and setters

```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;

// getters and setters

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 更为合适。