OSGI束豆脱壳问题



我是OSGI蓝图定义的新手,我正在努力完成以下任务:

捆绑包1:包含所有在blueprint1 中声明的Bean1(具有Bean2注入)

捆绑包2:在blueprint2中,我想使用Bean1(不声明Bean2)

结果:Bundle 2失败:缺少对Bean2的依赖,这是有道理的,因为Bundle 2没有添加Bean2,但我不想让它在这个Bundle中可见,它在Blueprint1中包含了一些复杂的配置(我不想在Blueprint2中重新复制整件事)我希望在Bundle1中创建它,并在Bundle2 中使用它

问题:有没有办法从Bundle 2获得这种访问权限(bean1应该像其他Bundle使用的服务一样)?如果没有,有其他方法吗?

谢谢你的帮助。

根据要求,在我的蓝图下面:

蓝图1:

`

<?xml version="1.0"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" ... >
<bean id="bean1" class="Bean1" />
<bean id="bean2" class="Bean2" />
</blueprint>

`

蓝图2:

`

<?xml version="1.0"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" ... >
<bean id="bean1" class="Bean1" />
</blueprint>

`

Bean 1:

public class Bean1 {
@BeanInject("bean2")
Bean2 bean2;
.... 
}

蓝图2的失败

下面是我的解决方案:

蓝图中的Bean声明将始终采用本地bundle上下文,这个声明应该标识该Bean中使用的所有依赖项,因此如果不声明Bean2,就无法在blueprint2中调用bean1。

解决方案是使用服务,在Blueprint1中将bean1声明为服务,并在Blueprint2中将其用作引用,然后无需定义任何依赖项。

此处描述的详细解决方案:服务OSGI

最新更新