在“@Bean”方法上使用“@ConfigurationProperties”注释

2022-09-01 05:17:53

有人可以给MWE一个如何直接在方法上使用注释吗?@ConfigurationProperties@Bean

我已经看到无数的例子使用它在类定义上 - 但还没有方法的例子。@Bean

引用文档

  • 将其添加到类定义或@Bean方法
  • @Target(值={类型,方法})

因此,我认为也有一种可能性和预期的用途 - 但不幸的是,我无法弄清楚。


答案 1
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
    return new DataSource();
}

在这里,DataSource 类具有 proeprties url、用户名、密码、driverClassName,因此 Spring boot 将它们映射到创建的对象。

数据源类的示例:

public class DataSource {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    //getters & setters, etc.
}

换句话说,这与使用刻板印象注释(@Component,@Service等)初始化某些Bean具有相同的效果,例如

@Component
@ConfigurationProperties(prefix="spring.datasource")
public class DataSource {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    //getters & setters, etc.
}

答案 2

24.8.1 第三方配置

除了 用于批注类之外,还可以在公共方法上使用它。当您希望将属性绑定到不受您控制的第三方组件时,这样做可能特别有用。@ConfigurationProperties@Bean

要从环境属性配置 Bean,请添加到其 Bean 注册中,如以下示例所示:@ConfigurationProperties

@ConfigurationProperties(prefix = "another")
@Bean
public AnotherComponent anotherComponent() {
    ...
}

使用另一个前缀定义的任何属性都将以类似于前面的 AcmeProperties 示例的方式映射到该另一个组件 Bean 上。


推荐