JIOPi v0.4 完成了模块访问的POJO化
说明:如未特殊说明,下文中的 JIOPi 均指 JIOPi v0.4 规范
JIOPi主题:回归POJO
JIOPi v0.4 在继承了JIOPi v0.3 蓝图! 的基础上,采用类重定义方式以避免引入额外API进行依赖注入,新增了以下特征和编程风格
- 本地开发模式模块库支持
- 模块中的实现类重定义支持
- 上下文环境中调用时的实现类重定义支持
- 重定义实现类允许额外功能扩展
- 模块内部的依赖注入
- WEB容器整合
作为一个模块化系统框架,因为其ClassPath的特殊性(统一部署),为了保证测试时和运行时的运行一致性,并且由于模块开发也可能用到框架特性,因此,测试环境也需要是一个JIOPi环境,为此JIOPi引入了本地开发模块库,无需配置文件,只需按照和传统WEB开发一致的目录结构,即可构成一个开发模块库,从而测试时即可使用JIOPi从开发模块库读取最新类文件进行调试。
第三方API侵入是任何框架都难以避免的问题,而被侵入框架API的程序也很容易被该框架绑定,很难脱离该运行环境。JIOPi一致努力减少框架API的引入,非运行时可选标注让JIOPi模块完全与POJO兼容,通过Ioc整合,避免调用代码中再引入额外API。然而Ioc整合也只是将JIOPi的API从用户的代码中转移到了Ioc配置文件中。JIOPi 0.4引入了全新的类重定义代码风格,完全避免了使用模块而需要引入JIOPi API的问题,在解决API侵入问题的同时,还带来了其他额外的优势。
下面将对相关配置进行说明
JIOPi 0.4没有带来新的程序API变化,唯一增加的只是配置文件说明
本地开发模块库
配置本地开发模块库,只需在jiopi.properties文件中增加一个新的模块库,配置如下:
jiopi.resourcepool.local.path=file:///e:/JiopiProjects/local-repository/
jiopi.resourcepool.local.pri=2
此处模块库的path不再是一个xml文件,而是一个本地目录,该目录的文件夹格式如下:
/blueprints
+blueprint_name
+0.1(version)
+lib
+classes
/modules
+module_name
+0.1.0.0(version)
+lib
+classes
/commonlibs
+group_name
即一级目录为固定名称用于存放 蓝图,模块,共享库
蓝图和模块 文件夹 包含相同的目录结构,首先是 版本号,下一级是标准WEB-INF目录,lib和classes目录
本地模块库只要保证包含以上文件夹即可,是否还存在其他文件夹并不影响该结构的解析,比如 版本目录下很可能还会存在一个src目录,模块根目录可能会作为一个project的根目录而存在.project文件等,这些都被允许,从而保证了开发模块库和标准开发环境目录结构的一致性
类重定义
何谓类的重定义呢?在JIOPi风格中,在出现对其他模块的依赖时,只需在classpath中部署蓝图程序,而蓝图是不能直接被使用的,因此必须有实现类,而且在传统接口编程中,必须获取接口的实现类对象,即不允许存在静态方法。
JIOPi通过将自定义的实现类进行重定义,即首先由用户创建一个接口的实现类,然后通过类重定义,将一个模块的实现类赋予该实现类,从而让该实现类与真实实现保持一致的运行时效果。因此在JIOPi中,允许在蓝图中定义静态方法或成员变量,并更高效和POJO模式的解决了Spring中的方法注入要解决的原型Bean的注入问题,并且实现模块依然可以通过配置文件进行快速变更,而无需更改代码,并且允许对实现类做出特殊处理,以便用于非JIOPi环境
类的重定义是这样配置的:
修改 jiopi-config.xml 文件
在 configuration 元素下直接添加
<redefine class="代理实现类的类全名" module="模块名" version="版本" controlpanel="控制面板名" configuration="配置文件ID"/>
其中 configuration是可选的
例如随iBean0.4.0.0中发布的一个简单邮件发送的配置:
<redefine class="org.jiopi.module.mailsender.sample.MyMailSender" module="jiopi.module.mailsender" version="0.1" controlpanel="jiopi.MailSender" configuration="test"/>
特别说明,iBean0.4.0.0 兼容JDK1.5,但是如果希望在context环境中实现类重定义,则需要JDK1.6的支持,在模块中配置的类重定义可以很好的运行在JDK1.5下
总结
JIOPi 0.4基本完成了构建本地Java模块系统所必须的各种特性,并构建了完全POJO兼容和无API侵入的JAVA模块化系统框架。JIOPi框架仅作用于Class的加载和实例化过程,类的重定义采取了字节码级别的代理类而非运行时代理类,从而不会对运行时环境产生任何效率影响,同时保证了只要代码在加载阶段不出现问题,则运行时阶段也绝对不会出现问题,具备较高的运行时可靠性。