我正在尝试创建自己的 @EnableXxx 样式注释(即 @EnableCustomizedPropertySources)。为此,注释导入类CustomizedPropertySourcesConfiguration,该类又实现ImportAware,以便访问@EnableCustomizedPropertySources注释的属性。
注释:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(CustomizedPropertySourcesConfiguration.class)
public @interface EnableCustomizedPropertySources {
String externalFolderName();
String propertiesFileName();
(...)
}
导入的配置类:
@Configuration
public class CustomizedPropertySourcesConfiguration implements ImportAware {
protected AnnotationAttributes enableCustomizedPropertySourcesAttributes;
@Override
public void setImportMetadata(AnnotationMetadata importMetadata) {
Map<String, Object> attributes = importMetadata.getAnnotationAttributes(EnableCustomizedPropertySources.class.getName(), false);
this.enableCustomizedPropertySourcesAttributes = AnnotationAttributes.fromMap(attributes);
}
@Bean
public PropertySourcesPlaceholderConfigurer propertySource() {
return (...);
}
}
问题是,当我使用 @EnableCustomizedPropertySources 注释来注释某些 @Configuration 类时,Spring 不会调用 setImportMetadata 方法,因此我无法访问注释属性。
ImportAware
类(CustomizedPropertySourcesConfiguration)需要两者:
@Configuration
@Component