我使用javase和解决方案osgi(felix)+ cdi(焊接)+ paxcdi。我有两个捆绑包A和B.捆绑包B是一个lib捆绑包。
在捆绑包A中,我有一个类和一个包。
package com.example.firstpackage;
import com.example.secondpackage.Class2;
public class Class1{
@Inject
private Class2 class2;
}
在B组中,我有两个班级和两个包
package com.example.secondpackage;
import com.example.thirdpackage.Class3;
public class Class2{
@Inject
private Class3 class3;
}
和
package com.example.thirdpackage;
public class Class3{
....
}
我安装并启动两个捆绑包。
问题 - 用于在bundle A类中注入的pax(或焊接)仅扫描那些为IN类bundle A导入的包。在我的例子中 - CDI 对于Class1 Class2中的注入将扫描bundle B的com.example.secondpackage。但是,它会抛出异常,因为Class2需要Class3但是com.example.thirdpackage不会扫描bundle A(因为它没有导入!!!)。 com.example.thirdpackage只扫描B组,但据我所知,cdi的每个bundle都有自己的范围。如何解决?
答案 0 :(得分:4)
如果您不更改系统设计,您只能从thirdpackage
导出B
并将其导入A
。
为了实现更好的封装,您可以将IClass2
实现的服务接口Class2
分解出来,使此类成为@OsgiServiceProvider
并使用
@Inject @OsgiService
private IClass2 class2;
Class1
中的。