作用概述
@EnableConfigurationProperties注解用于显式地启用对@ConfigurationProperties注解类的支持。它告诉Spring Boot框架,在应用程序中存在使用@ConfigurationProperties注解的类,需要自动加载并绑定配置文件(如application.properties或application.yml)中的属性到这些类的字段上。(@EnableConfigurationProperties 注解本身并不直接负责创建 MaaSRemoteProperties 类的实例。它的作用是启用对使用 @ConfigurationProperties 注解的类的支持,允许 Spring Boot 自动将这些类的实例与配置文件中的属性进行绑定。将bean注入到spring容器中去)
具体作用
- 启用自动装配:
@EnableConfigurationProperties注解能够启用对配置属性类的自动装配功能。这意味着,当Spring Boot应用程序启动时,它会自动查找并注册这些配置属性类为Spring容器中的Bean。 - 关联配置类:
在主类上使用@EnableConfigurationProperties注解,并将其value属性设置为一个或多个@ConfigurationProperties注解的类,可以建立这些配置属性类与Spring容器之间的关联。 - 属性绑定:
一旦配置属性类被注册为Bean,并且与Spring容器建立了关联,Spring Boot就会将这些类的字段与配置文件中的属性进行绑定。这允许应用程序在运行时动态地读取和使用这些配置属性。 - 简化配置:
使用@EnableConfigurationProperties注解可以简化配置过程,因为它避免了在每个配置属性类上添加@Component等Spring组件注解的需要。同时,它也减少了类路径扫描的开销,使得代码更加清晰和易于维护。
使用示例
假设你有一个配置属性类MyProperties,它使用了@ConfigurationProperties注解来绑定应用程序的配置属性,并且这个类没有使用@Component这类注解
@ConfigurationProperties(prefix = "maas.server")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyProperties {
private String apiPrefix ;
}
为了启用对这个配置属性类的支持,你可以在Spring Boot应用的启动类或任何一个配置类上使用@EnableConfigurationProperties注解:
@Slf4j
@Service
@EnableConfigurationProperties(value = MaaSRemoteProperties.class)
@ConditionalOnProperty(name = "maas.server.use", havingValue = MaaSRemoteConstants.Service.ACTIVE_PROD, matchIfMissing = true)
public class MaaSRemoteServiceImpl implements MaaSRemoteService {
@Autowired
private MaaSRemoteProperties maaSRemoteProperties;
}
现在,当应用程序启动时,配置文件(如application.properties或application.yml)中的属性值将会被注入到MyProperties类的对应字段中。你可以通过在其他组件或服务中注入MyProperties类的实例来访问这些属性。
maas:
server:
apiPrefix: http://11.11.11.1:30808
use: prod
注意事项
- 从Spring Boot 2.2版本开始,如果你的配置属性类是以组件(如使用@Component注解)的形式注册的,那么你不需要显式地使用@EnableConfigurationProperties注解。Spring Boot会自动配置这些属性类。
- @EnableConfigurationProperties注解本身并不进行具体的属性注入;它只是启用了对配置属性类的支持,并将其与Spring容器关联起来。要实现属性注入,你还需要在相关的配置属性类上使用@ConfigurationProperties注解,并在其中定义相应的属性以及相应的getter和setter方法。
综上所述,@EnableConfigurationProperties注解在Spring Boot框架中起到了启用和管理配置属性类的重要作用,使得从外部配置文件中读取配置变得简单和直接。