Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 构造函数上不允许使用HK2自定义批注_Dependency Injection_Annotations_Constructor Injection_Hk2 - Fatal编程技术网

Dependency injection 构造函数上不允许使用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

使用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"

我遗漏了什么?

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

注释类型
构造函数
字段
局部变量
方法
参数
类型

为了能够以构造函数为目标,您需要将
构造函数
添加到
@target
中。您可以有多个目标。比如说

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.CONSTRUCTOR})
public @interface MyCustomAnnotation {}
另请参见:


听起来像是注释定义问题。确保您在
@Target
中有。您在尝试构建之前(在IDE中)没有编译器错误吗?哦…是的。。你说得对。。。我可以只指定一个目标吗?如果我想让注释同时使用变量和构造函数呢?
@Target({..,……})
:-)太好了!它是有效的。。。真的像往常一样有用!!!谢谢