OSGI Bundle bean delcaration issue

时间:2017-11-15 06:09:13

标签: java osgi-bundle blueprint-osgi

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

1 个答案:

答案 0 :(得分:0)

在我的解决方案之下:

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

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

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