【问题标题】:CDI -- @Inject not working among dependent projectsCDI -- @Inject 在依赖项目中不起作用
【发布时间】:2013-05-03 14:41:08
【问题描述】:

我的项目(JBoss MSC version 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)

我在管理器项目 (VQManagerProj) 中有一个管理器类,它扩展了一个 JDAO 类,而 JDAO 又实现了一个接口 VDAO

@Named("qManager")
@ApplicationScoped
public class QManager extends JDAO {...}

JDAO implements VDAO

代理项目 (VProxyProj)

我在代理项目 (VProxyProj) 中有一个代理类,它实现了一个接口 VProxy 并将管理器注入其中

@Named("vProxyImpl")
@ApplicationScoped
public class VProxyImpl implements VProxy {

    @Inject @Named("qManager")  
    private VDao vdao;

}

服务项目 (QServiceProj)

我在服务项目 (QServiceProj) 中有一个服务类,它扩展了一个抽象类

@Named
@ApplicationScoped
public class QService extends AbstractService {..}

在抽象类中我注入了代理

 public abstract class AbstractService{    
     @Inject @Named("vProxyImpl")
        private static VProxy proxy;
    }

并使用此代理对象,服务类调用管理器等

网络项目 (VWebProj)

现在我在注入服务类的 Web 项目 (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 放到了所有的项目中,

提前致谢 查理

【问题讨论】:

  • 注入无法跨越类加载器边界。您的部署结构是什么?
  • 每个项目都有一个编译依赖。仅部署 WebProject。

标签: cdi


【解决方案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 实例。你需要自己决定什么是最好的方法。

【讨论】:

  • 尝试将依赖项“注入”到静态字段是问题所在。改变后,现在一切都在工作......谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多