0

我使用 javase 和解决方案 osgi (felix)+cdi(weld)+paxcdi。我有两个包 A 和 B。包 B 是一个 lib 包。

在捆绑包中,AI 有一个类和一个包。

package com.example.firstpackage;
import com.example.secondpackage.Class2;
public class Class1{
   @Inject
   private Class2 class2;
}

在捆绑 BI 中有两个类和两个包

package com.example.secondpackage;
import com.example.thirdpackage.Class3;
public class Class2{
   @Inject
   private Class3 class3;
}

package com.example.thirdpackage;
public class Class3{
   ....
}

我安装并启动两个捆绑包。

问题 - 用于在包 A 的类中注入的 pax(或焊接)仅扫描为包 A 中的类导入的那些包。在我的示例中 - 用于注入 Class1 Class2 的 CDI 将扫描包 B 的 com.example.secondpackage。但是,它会抛出异常,因为 Class2 需要 Class3 但 com.example.thirdpackage 没有扫描包 A(因为它没有导入!!!)。com.example.thirdpackage 仅扫描包 B,但据我所知,cdi 的每个包都有自己的范围。如何解决?

4

1 回答 1

4

如果您不更改系统设计,您所能做的就是thirdpackage从.BA

为了实现更好的封装,你可以分解出一个IClass2由 实现的服务接口Class2,使这个类成为一个@OsgiServiceProvider并使用

@Inject @OsgiService
private IClass2 class2;

Class1.

于 2015-05-30T15:49:38.870 回答