有没有人知道如何在“元注释”中使用Spring的ImportResource注释?

时间:2015-12-17 09:21:57

标签: java spring spring-boot

我正在设置类似SpringBootApplication Spring Boot提供的Spring“元注释”。我已经能够成功使用此约定设置ComponentScan和EnableAutoConfiguration注释,但是我无法将value属性成功传递给ImportResource。

以下是我想做的一个简单示例:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ComponentScan(basePackages = {"com.my.package.example"})
@EnableAutoConfiguration
@ImportResource
public @interface MyMetaAnnotationExample {
    String[] value() default {};
}

但是,编译器抱怨没有属性传递给ImportResource。当我尝试传递该属性时,我没有通过MyMetaAnnotationExample传递的值,因此我无法设置它们。

ComponentScan当然是有效的,因为这是需要硬编码的东西,但是ImportResource是需要传递值的东西。

1 个答案:

答案 0 :(得分:2)

Spring Framework 4.2(由Spring Boot 1.3.x使用)放宽了对@ImportResource的限制,因此您应该能够做到你想要的。

您可以在元注释上使用@AliasFor来指定其value属性应在value上配置ImportResource属性。例如:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ComponentScan(basePackages = {"com.my.package.example"})
@EnableAutoConfiguration
@ImportResource
public @interface MyMetaAnnotationExample {

    @AliasFor(annotation=ImportResource.class, attribute="value")
    String[] value() default {};
}