在构造函数上不允许HK2自定义注释注释

时间:2015-11-12 08:50:49

标签: dependency-injection annotations constructor-injection hk2

使用HK2注入框架我开发了一个自定义注释,用于在我的类中注入我的自定义对象。

如果我将我的对象注释为类变量,那么一切正常:

public class MyClass {
    @MyCustomAnnotation
    MyType obj1

    @MyCustomAnnotation
    MyType obj2

     ...

现在我需要将我的对象注入构造函数参数,即:

public class MyClass {

    MyType obj1        
    MyType obj2

    @MyCustomAnnotation
    public MyClass(MyType obj1, MyType obj2){
        this.obj1 = obj1;
        this.obj2 = obj2;
    }
     ...

在我的注射解析器中,我压倒了:

@Override
public boolean isConstructorParameterIndicator() {
    return true;
}

以便返回true。

问题是,当我尝试构建我的项目时,它会发出错误消息:

"The annotation MyCustomAnnotation is disallowed for this location"

我缺少什么?

1 个答案:

答案 0 :(得分:1)

听起来像注释定义问题。注释定义上的@Target定义允许注释的位置。允许的目标位于ElementType枚举集。

  

ANNOTATION_TYPECONSTRUCTORFIELDLOCAL_VARIABLEMETHODPACKAGEPARAMETERTYPE

为了能够定位构造函数,您需要将CONSTRUCTOR添加到@Target。您可以拥有多个目标。例如

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.CONSTRUCTOR})
public @interface MyCustomAnnotation {}

另见: