我是OSGI蓝图定义的新手,我试图完成以下任务:
Bundle 1:包含所有在blueprint1中声明的Bean1(具有Bean2注入)
捆绑2:在它的blueprint2中,我想使用Bean1(不声明Bean2)
结果: Bundle 2失败了:缺少对Bean2的依赖,这是有道理的,因为Bundle 2没有添加Bean2,但我不想让它在这个包中可见,它有一些复杂的配置包含在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失败
答案 0 :(得分:0)
在我的解决方案之下:
蓝图中的Bean声明将始终采用本地bundle上下文,这个应该识别此bean中使用的所有依赖项,因此在没有声明Bean2的情况下无法在blueprint2中调用bean1。
解决方案是使用服务,将bean1声明为Blueprint1中的服务,并将其用作Blueprint2中的引用,然后无需定义任何依赖项。
此处描述的详细解决方案:Service OSGI