Ожидается ли, что классы свойств конфигурации должны использоваться в классах @Configuration
.
Среда
- Spring Boot 2.0.2
- Java-версия "10.0.1" 2018-04-17 Java (TM) SE Runtime Environment 18.3 (сборка 10.0).1 + 10), Java HotSpot (TM) 64-битный сервер ВМ 18.3 (сборка 10.0.1 + 10, смешанный режим)
- OSX 10.13.4
Мой код
application-local.properties:
s3.bucketName=test-bucket
Свойства конфигурации
@Validated
@ConfigurationProperties(prefix = "s3")
public class S3ConfigurationProperties {
@NotBlank
private String bucketName;
public String getBucketName() {
return bucketName;
}
public void setBucketName(final String bucketName) {
this.bucketName = bucketName;
}
}
Класс конфигурации
@Configuration
@Profile("local")
@EnableConfigurationProperties(S3ConfigurationProperties.class)
public class LocalS3Configuration {
@Autowired
private S3ConfigurationProperties properties;
@Value("${s3.bucketName}")
private String bucket;
@Bean(destroyMethod = "shutdown")
public AmazonS3 amazonS3(@Value("${local.s3.endpoint}") final String s3Endpoint, @Value("${s3.bucketName}") final String bucketName) {
// use properties...
final String bucketInjectedToMethod = bucketName; // works
final String bucketInjectedViaProperties = properties.getBucketName(); // null
final String bucketInjectedInClass = bucket; // null
}
}
Наблюдаемое поведение
Если я вставлю S3ConfigurationProperties
в качестве поля в класс конфигурации или в качестве аргумента для метода amazonS3
, экземпляр будет non-null
, но свойство bucketName
внутри него будет null
.
Внедрение строки в класс с помощью @Value
также null
.
Единственный способ заставить его работать, это использовать аргумент метода, аннотированный как @Value
сстрока.
Это ожидаемое поведение или, возможно, ошибка?