我的项目的基本架构(JBoss MSC版本1.0.2.GA-redhat-2)是这样的
(VWebProj) --- >compile dependency ---> service project (QServiceProj)
(QServiceProj) ---->compile dependency ---> proxy project(VProxyProj)
(VProxyProj) ---->compile dependency ---> Manager project(VQManagerProj)
经理项目(VQManagerProj)
我在Manager项目(VQManagerProj)中有一个manger类,它扩展了一个类JDAO,后者实现了一个接口VDAO
@Named("qManager")
@ApplicationScoped
public class QManager extends JDAO {...}
JDAO implements VDAO
代理项目(VProxyProj)
我在Proxy Project(VProxyProj)中有一个代理类,它实现了一个接口VProxy并将管理器注入其中
@Named("vProxyImpl")
@ApplicationScoped
public class VProxyImpl implements VProxy {
@Inject @Named("qManager")
private VDao vdao;
}
服务项目(QServiceProj)
我在Sevice Project(QServiceProj)中有一个服务类,它扩展了一个抽象类
@Named
@ApplicationScoped
public class QService extends AbstractService {..}
在抽象类中我注入了代理
public abstract class AbstractService{
@Inject @Named("vProxyImpl")
private static VProxy proxy;
}
并使用此代理对象,服务类调用管理器等
Web项目(VWebProj)
现在我在Web Project(VWebProj)中有一个servlet,其中注入了服务类
@Inject
private QService qService;
问题是除了qService之外没有其他注入工作,即在QService代理实例中是空的
但是如果我直接在servlet类中添加所有注入,就像这样
@Inject @Named("qManager")
private VDao vdao;
@Inject @Named("vProxyImpl")
private static VProxy proxy;
它们都已初始化但如果我通过QService它们是空的
我已将beans.xml放在所有项目中,
提前感谢 查理
答案 0 :(得分:1)
据我所知,Injector只能将对象注入实例及其字段 - 您试图将依赖关系“注入”静态字段。
我建议使用@Singleton注释 - 创建单独的实例,它将保存所有当前的静态引用,并将这些单例注入到您的实例中。
@Singleton
class ProxyService {
@Inject @Named("vProxyImpl")
private VProxy proxy;
public VProxy getProxy() {
return proxy;
}
}
public abstract class AbstractService{
@Inject
private ProxyService proxyService;
}
或者您可以考虑制作VProxy单例 - 我似乎想要获取的只是整个应用程序中的一个Proxy实例。你需要自己决定什么是最好的方法。