蓝图对此用途有限,因为蓝图根据定义是声明性的,并且您希望以编程方式执行某些操作。但是,Blueprint 可以通过注入包上下文来设置您的方式。一旦你有了一个包上下文,你就可以使用org.osgi.framework
API来获取所有包 ( context.getBundles()
)、查询它们的状态、启动和停止它们,等等。
您的要求 3),加载一个包,在 OSGi 上下文中并没有真正意义,因为它们的生命周期是它们被安装然后启动。如果一个包没有被安装,它不会被包含在 getBundles() 中,但是它可以使用上下文来安装。
要将上下文注入蓝图 bean,请使用特殊属性:
<bean class="SomeClass">
<property name="context" ref="blueprintBundleContext"/>
</bean>
我从Enterprise OSGi in Action借用了那个例子,但是 developerWorks 上有一个非常好的蓝图教程:http: //www.ibm.com/developerworks/opensource/library/os-osgiblueprint/
最近有人问了一个类似的问题,您可能也会发现它很有用:我应该如何将 OSGi 控制台实现到 Bundle 中?(ss
类似于bundle:list
,虽然它不提供任何蓝图特定的信息)。