記事ディレクトリ
注釈の概要
ConfigurationProperties アノテーションは主に、外部構成ファイルによって構成された属性をこの ** Spring Bean实例
** に埋めるために使用されます。
注: 単独で使用することは無効であり、他のアノテーションと組み合わせて使用する必要があります。また、Spring Beanに対してのみ有効となり、通常の新規オブジェクトには有効になりません。
ConfigurationProperties の使用方法:
- @ConfigurationProperties + @Component (または Bean をインスタンス化するための他のアノテーション) は、Bean 定義クラスにアノテーションが付けられます
- @ConfigurationProperties + @Bean は構成クラスの Bean 定義メソッドにアノテーションが付けられます
- @ConfigurationProperties は共通クラスにアノテーションが付けられ、@EnableConfigurationProperties によって Bean として定義されます。
使い方
設定ファイル:
sftp:
host: 127.0.0.1
port: 22
username: admin
password: 123456
1. @ConfigurationProperties + @Component
@ConfigurationProperties + @Component (または Bean をインスタンス化するための他のアノテーション) は、Bean 定義クラスにアノテーションが付けられます
@Data
@Component
// @Configuration
@ConfigurationProperties(prefix = "sftp")
public class Sftp {
private String host;
private String port;
private String username;
private String password;
}
2. @ConfigurationProperties + @Bean
@ConfigurationProperties + @Bean は構成クラスの Bean 定義メソッドにアノテーションが付けられます
@Data
public class Sftp {
private String host;
private String port;
private String username;
private String password;
}
@Configuration
public class BeanConfig {
@Bean
@ConfigurationProperties(prefix = "sftp")
public Sftp sftp() {
return new Sftp();
}
}
この使用法で発生した落とし穴:
コードが次のように変更された場合に @ConfigurationProperties を再利用する:
@Data
@ConfigurationProperties(prefix = "sftp")
public class Sftp {
private String host;
private String port;
private String username;
private String password;
}
@Configuration
public class BeanConfig {
@Bean
@ConfigurationProperties(prefix = "aaaa")
public Sftp sftp() {
return new Sftp();
}
}
このように、@ConfigurationProperties アノテーションがあり、クラスに @ConfigurationProperties アノテーションがあり、メソッドの @ConfigurationProperties のみが有効になります(クラスのアノテーション メソッドを書き換えると理解できます)。
3. @ConfigurationProperties + @EnableConfigurationProperties
@ConfigurationProperties は共通クラスにアノテーションが付けられ、@EnableConfigurationProperties によって Bean として定義されます。
@Data
@ConfigurationProperties(prefix = "sftp")
public class Sftp {
private String host;
private String port;
private String username;
private String password;
}
@SpringBootApplication
@EnableConfigurationProperties(value = {
Sftp.class})
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}