使用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"
我缺少什么?
答案 0 :(得分:1)
听起来像注释定义问题。注释定义上的@Target
定义允许注释的位置。允许的目标位于ElementType
枚举集。
ANNOTATION_TYPE
,CONSTRUCTOR
,FIELD
,LOCAL_VARIABLE
,METHOD
,PACKAGE
,PARAMETER
,TYPE
为了能够定位构造函数,您需要将CONSTRUCTOR
添加到@Target
。您可以拥有多个目标。例如
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.CONSTRUCTOR})
public @interface MyCustomAnnotation {}
另见: