在JIOPi v0.1中引入了 免部署方式访问Java程序的编程风格
详见: http://www.iteye.com/topic/655312
JIOPi v0.2 带来的是 忽略实现类
在POJO类库中,即便使用了接口与实现类分离的设计模式,在使用一个POJO类库时,还是需要知道很多实现类的细节,比如部署依赖Jar,了解与获取对象实例相关的实现类的使用,即便使用了依赖注入,避免了代码中直接出现实现类的细节,但配置文件中还是会出现,并且很有可能一个很简单的接口的实现却十分复杂,需要依赖若干个Jar包,以至于无论是升级实现还是替换实现都不是一件容易的事情,那干脆让实现类变得透明呢?
JIOPi提供了模块标注,使得模块中的类可以自己声明其实现的蓝图接口是哪个,以及实例化策略,从而让模块的实现细节从蓝图的使用中脱离出来,下面就来看看使用方式的转变吧:
特别说明:在JIOPi中,蓝图并不意味着只是接口类,蓝图定义了使用模式,而不关心实现方式。
蓝图接口,这里使用一个类而非接口来进行访问演示:
package org.jiopi.ibean.example.blueprint.testblueprint;
import org.jiopi.framework.annotation.blueprint.RegisterControlPanel;
@RegisterControlPanel
public class ClassControlPanel {
@RegisterControlPanel
public final static String classStaticString = "classStaticString";
@RegisterControlPanel
public String classMethod(){
return null;
}
}
这个类被定义为蓝图接口,因此直接new出来使用是没有任何意义的
类上的标注进行了 蓝图接口名的短名称注册,默认使用当前类名(不含包名)
静态成员变量和方法上的 短名称注册 是为了简化 免部署方式的调用代码
范例模块库中 的 jiopi.ibean.testmodule 0.1.0.0 对其进行了实现
具体实现类是 NewInterfaceAndClassControlPanelImpl ,并且定义为单例模式执行
而使用JIOPi风格,你无须了解这些细节,只需要 确定用哪个实现模块即可,并且只需替换模块名即可完成实现类的更换
下面展示两种风格的使用代码:
免部署风格:
使用免部署风格,无需在lib中放置任何Jar
//获取模块控制台
ModuleConsole testModule = CentralConsole.accessModuleConsole("jiopi.ibean.testmodule", "0.1.0.0");
//访问classStaticString成员变量
//由于变量注册了短名称,可使用短名称直接访问
System.out.println(testModule.staticVariable("classStaticString"));
//访问函数
//同样注册了短名称,可直接访问
System.out.println(testModule.operate("classMethod"),String.class);
接口访问风格:
需要在lib中放置 蓝图接口 的Jar包
//同样需要获取模块控制台,这里不设置版本,使用模块最新版
ModuleConsole testModule = CentralConsole.accessModuleConsole("jiopi.ibean.testmodule");
//使用短接口类名获取实现类对象
ClassControlPanel ccp = testModule.accessControlPanel("ClassControlPanel", ClassControlPanel.class);
//直接执行方法
System.out.println(ccp.classMethod());
当然,无论哪种风格,都必须使用JIOPi的API进行对象获取,你依然可以使用其他依赖注入框架来完成对JIOPi调用的隐含
当需要更换实现模块时,只需要更换代码中的模块名和可选的版本即可
这里暂时隐含了模块的自我配置环节,因为大多数实现类都不可能是通过默认构造函数来完成实例化的,但是这一步在JIOPi风格中依然是对使用者隐藏的,JIOPi风格的模块自动装配和依赖注入将在下一版本中引入
JIOPi风格的蓝图接口屏蔽了实现模块的几乎所有实现细节,一个功能的使用完全由 蓝图API 来定义,开发人员也无需为了使用一个模块而在lib中放置自己不知作何用途的Jar包
希望和大家继续交流,你是否觉得忽略实现类可以降低一些类库的使用难度和学习曲线呢?
以及,你是否愿意使用这种 蓝图模式 开发 模块呢?
参考文章:
JIOPi v0.2 规范概述 http://jiopi.iteye.com/blog/669960
JIOPi v0.2参考实现 iBean v0.2.0.0 下载地址 http://code.google.com/p/ibean/downloads/list