带有hk2的注入对象返回null



我试图在jersey应用程序中使用hk2依赖注入。我有一个名为ClassA的类实现了IClassA接口。我想在ClassA中使用ClassB对象的依赖注入:

package com.example.test
public class ClassA implements IClassA {
@Inject
ClassB classB;
@Override
public void method() {
classB.doSomething();
}
}

ClassB:

package com.example.test
public class ClassB {
public void doSomething() {
}
}

我创建了resourcecconfig类。

package com.example.test.di
public class App extends ResourceConfig {
public App() {
register(new MyApplicationBinder());
packages(true, new String[]{"com.example.test"});
}
}

我创建了AbstractBinder类

package com.example.test.di
public class MyApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(ClassB.class).to(ClassB.class).in(Singleton.class);
}
}

我添加了Application到web.xml

<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.example.test.di.App</param-value>
</init-param>

我创建了一个像这样的ClassA对象:

IClassA classA = new ClassA();
classA.method(); //--> classB is null

我的问题是classB对象总是在ClassA为空。我找不出哪里不对。谢谢。

您已经在Singleton作用域中绑定了ClassB(这意味着hk2将只创建其中一个)。相反,将ClassB绑定到PerLookup作用域。然后还要注入一个javax.inject.Provider。每次你调用Provider的get方法,你应该得到一个新的ClassB实例

相关内容

  • 没有找到相关文章

最新更新