Sping Boot 文档指出,要使用@ConfigurationProperties
注解
您还需要列出要在@EnableConfigurationProperties
注解中注册的属性类,如下例所示:
并给出以下代码:
@Configuration
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
}
但在下一段中写道:
即使前面的配置为AcmeProperties创建了一个常规bean,我们也建议@ConfigurationProperties
只处理环境,特别是不要从上下文注入其他bean。尽管如此,@EnableConfigurationProperties
注解也会自动应用于您的项目,以便从Environment
配置任何用@ConfigurationProperties
注解的 existing bean。
建议不必在@EnableConfigurationProperties
注解下列出@ConfigurationProperties
bean。
那么到底是哪一个呢?通过实验,我发现如果我用@ConfigurationProperties
注解一个bean,它会像预期的那样获得注入到它的属性,而不需要在@EnableConfigurationProperties
中列出它,但是如果是这样的话,为什么要在@EnableConfigurationProperties
下列出任何有@ConfigurationProperties
注解的东西呢,就像文档中所示的那样?这有什么区别吗?
4条答案
按热度按时间zujrkrfu1#
正如M. Deinum所提到的
@EnableConfigurationProperties
是为了支持@ConfigurationProperties
。如果你看一下Java文档的注解,你会看到:启用对ConfigurationProperties注解bean的支持。ConfigurationProperties bean可以用标准方式注册(例如使用Bean@Bean方法),或者,为了方便起见,可以直接在此注解上指定。
例如,假设你有一个类,负责从
application.yml
/application.properties
中读取和存储信息,这些信息是连接到不同数据库所必需的,你可以用@ConfigurationProperties
来注解它。然后,通常有一个
@Configuration
注解类,它为应用程序提供DataSource
@Bean
,可以使用@EnableConfigurationProperties
将其链接到@ConfigurationProperties
类,并相应地初始化数据源。下面是一个小例子:
uurity8g2#
我花了一段时间才到达这个职位,但我想在这里补充,使其他人可能会受益。
@ConfigurationProperties
-用于绑定一个类和一个外化的属性文件。非常强大,必须用于分离bean类和配置实体类。@Configuration
-创建一个配置原型的Spring bean。@EnableConfigurationProperties
-在配置实体类和Spring配置原型之间创建绑定,以便在注入服务属性后可以轻松地检索。6ojccjat3#
如果我们看看下面的代码:
@Configuration @EnableConfigurationProperties @ConfigurationProperties(prefix="ar1") public class ar1Settings { }
*@Configuration告诉Spring将其视为配置类并将其注册为Bean
*@EnableConfigurationProperties告诉Spring将该类视为application.yml/properties值的使用者
*@ConfigurationProperties告诉Spring这个类代表哪个部分。
我的理解是,如果您不需要指定属性文件的节,则可以省略@ConfigurationProperties。
lo8azlld4#
@EnableConfigurationProperties
导入EnableConfigurationPropertiesRegistrar
,从而支持@ConfigurationProperties
注解bean。@ConfigurationProperties
是外部化配置的注解,它将应用于使用@Bean
注解的bean配置类或方法,例如加载属性并将其绑定到方法或类中与前缀. ps匹配的属性:
some-prefix
绑定到SomePrefix
,因为Spring支持松弛绑定。在springboot 2.2之前,您可以执行以下操作之一:
或
沿着
来自Spring Boot2.2
你可以用一种简单得多的方法来做:
这样,由@SpringBootApplication启用的类路径扫描器就会找到ConfigProperties类,即使我们没有用@Component注解这个类。