在传统的Ioc容器里,對象的生命周期一般为静态的,在初始化时创建后,就不会在运行期间撤下或替换。
在Blueprint容器中,可以引入OSGI服务引用,而OSGI服务是动态存在的,也就是说随时有可能由不可用变为可用或由可用变为不可用。
我们可以将一个bean发布出一个osgi服务,然后将这个服务的引用(reference)再注入另一个bean中,这个bean又可以再基于这个服务引用来实现并发布更高层次的服务……这样就可以一级级地装配出粗粒度的服务出来。
当在下层的服务被撤走时,上层强制依赖于它的服务也会被撤下,而下层服务再次恢复时,上层的服务又会快速地恢复,blueprint就是这样动态地装配这些服务。这种动态性可以得出一个推论:如果你能访问到上层服务,那么这个服务中依赖的下层服务的引用就不会为null,所以,用这种方式组装的应用就不会因OSGI的动态性而常抛出异常。
但是osgi服务始终只是个本地服务(暂抛开osgi remote service而言),需要提供给一些外部应用系统调用,才能发挥作用。
所以,要么你将应用建筑在blueprint容器里,通过将服务引用注入的方式使用这些osgi服务。要么你就在外部应用系统中引用blueprint的context,通过此context来查找并调用这些osgi服务,还有一种方式就是:blueprint容器在发布osgi服务的同时,也将这个服务注册到jndi registry上,外部应用系统就可以通过jndi来查找并调用这些osgi服务。
后面两种方式都脱离了DI的方式,不能确保服务在被调用时是可用的。而第一种方式则依然在DI的框架内,如果它调用服务,服务就是可用的,如果服务不可用,那么它也没机会去调用下层服务——因为那时连它自已也还没组装起来。
分享到:
相关推荐
OSGi的入门资料,网上找的,初探OSGi 的全文
OSGi的入门教程,帮助初学者快速了解OSGi的定义、用途及组成。
强大的OSGI框架入门和例子,看看eclipse就知道OSGI有多强大了。希望对大家有用!
OSGI 入门资料PDF,包括OSGI实战、OSGI进阶、OSGI 入门和整合Spring、OSGI原理与最佳实践
osgi-blueprint-helloworld 概述 一个使用OSGI蓝图容器规范的非常简单的HelloWorld示例。 想要查询更多的信息: osgi-blueprint-helloworld-api 应用程序API osgi-blueprint-helloworld-server 发布服务以供...
NULL 博文链接:https://conkeyn.iteye.com/blog/2113824
Spring OSGI 快速入门中文教程
OSGI简单入门.doc
osgi webservice入门
OSGI入门和整合Spring OSGI入门和整合Spring
spring-osgi 入门手册和代码 spring-osgi 入门手册和代码 spring-osgi 入门手册和代码 spring-osgi 入门手册和代码
总结了osgi服务发布和获取的多种方式。
Equinox这个工程,对Equinox进行了试用,不出意料,尽管Equinox还没有正式的发布版本,甚至连里程碑版本都还没有,但Equinox作为OSGI R4 RI,表现非常出色,特别是借助Eclipse提供的IDE,更是令它在OSGI框架的竞争中...
Spring OSGi 入门.pdf Spring OSGi 入门.pdf
OSGI入门和整合Spring + OSGI进阶 + OSGI实战
OSGi 入门级教程OSGi 入门级教程OSGi 入门级教程OSGi 入门级教程中文版
blueprint-osgi-bundle
关于SOA中热门技术OSGI的入门样例的经典版本,供对需要进行ERP设计和学习的入门读者使用的经典
资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...