无法让Spring的ImportAware工作

问题描述 投票:0回答:1

我正在尝试创建自己的 @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 方法,因此我无法访问注释属性。

spring configuration
1个回答
1
投票

ImportAware
类(CustomizedPropertySourcesConfiguration)需要两者:

@Configuration
@Component
© www.soinside.com 2019 - 2024. All rights reserved.