我是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