我试图在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实例