是否可以编写AOP注释?

时间:2020-03-10 20:04:42

标签: java spring aop spring-aop

因此,我有2个注释A和B来自现有的Java库,它们实现了AOP。

他们俩都做了我班上必不可少的事情,我需要按此顺序(在B之前先于A)放置

public class MyClass{

    @A(parameter="par")
    @B(value="key")
    public void method(){

    }
}

是否可以将第三个注释C定义为两者的组合? 所以最后我会得到:

public class MyClass{

    @C(parameter="par", value="key")
    public void method(){

    }
}

编辑:还添加了从@A获取参数的要求,以及由于注释是从libs获取的,所以我没有源代码。

2 个答案:

答案 0 :(得分:1)

这取决于您使用的库。例如spring

 @Documented
   @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
            @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
            @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {

        /**
         * Exclude specific auto-configuration classes such that they will never be applied.
         * @return the classes to exclude
         */
        @AliasFor(annotation = EnableAutoConfiguration.class)
        Class<?>[] exclude() default {};

使用这种方法,您将:

    @A
    @B
    public @interface C{
        @AliasFor(annotation = B.class)
        String value();
        @AliasFor(annotation = А.class, attribute = "parameter")
        String param();
    }

答案 1 :(得分:1)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@A
@B
public @interface C {
    @AliasFor(annotation = B.class, attribute = "value")
    String value() default {};
}

让我知道这是否可行。