Dependency injection 构造函数上不允许使用HK2自定义批注
使用HK2注入框架,我开发了一个自定义注释,用于在类中注入自定义对象 如果我将对象注释为类变量,所有这些都可以正常工作:Dependency injection 构造函数上不允许使用HK2自定义批注,dependency-injection,annotations,constructor-injection,hk2,Dependency Injection,Annotations,Constructor Injection,Hk2,使用HK2注入框架,我开发了一个自定义注释,用于在类中注入自定义对象 如果我将对象注释为类变量,所有这些都可以正常工作: public class MyClass { @MyCustomAnnotation MyType obj1 @MyCustomAnnotation MyType obj2 ... 现在我需要将对象作为构造函数参数注入,即: public class MyClass { MyType obj1
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"
我遗漏了什么?听起来像是注释定义问题。注释定义上的
@Target
定义了允许注释的位置。允许的目标位于枚举集中
注释类型
,构造函数
,字段
,局部变量
,方法
,包
,参数
,类型
为了能够以构造函数为目标,您需要将构造函数
添加到@target
中。您可以有多个目标。比如说
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.CONSTRUCTOR})
public @interface MyCustomAnnotation {}
另请参见:
@Target
中有。您在尝试构建之前(在IDE中)没有编译器错误吗?哦…是的。。你说得对。。。我可以只指定一个目标吗?如果我想让注释同时使用变量和构造函数呢?@Target({..,……})
:-)太好了!它是有效的。。。真的像往常一样有用!!!谢谢