企业模块化开发Java框架:Hasor
Hasor是一款开源框架。它是为了解决企业模块化开发中复杂性而创建的。Hasor遵循简单的依赖、单一职责,在开发多模块企业项目中更加有调理。然而Hasor的用途不仅仅限于多模块项目开发。从简单性、松耦合性的角度而言,任何Java应用都可以从中受益。Hasor与 Struts,Hibernate等单层框架不同,它可以提供一个以统一、高效的、友好的方式构造整个应用程序。并且可以将这些单层框架建立起一个连贯的体系,可以说Hasor是一个搭建开发环境的框架。这一点与Spring比较相似,您可以理解Hasor可以作为Spring之外的一种选择。
特点:
- 清晰:在Hasor体系中每一个模块都被封装到一个jar或者classpath路径中。
(您可以将多个模块的代码放到一个java项目中,提供一组模块) - 简单:基于注解和接口的模块定义,除此之不外需要任何其他元素;在解析Xml配置文件时Hasor采用了一种统一的方式进行处理,这使得开发人员几乎不需要编写任何Xml解析器解析自定义Xml。如果Hasor提供的模块不适合项目,你可以很便捷的定义新模块替换掉它。
- 容器:Hasor包含并管理每个模块对象的配置和生命周期,这使得它成为一种容器。不光如此Hasor还提供了工作空间接口,工作空间类似于软件的HOME(诸如:JAVA_HOME、Eclipse WorkSpace、M2_HOME)工作空间的提供为项目的资源管理提供了有效的保障。
- 轻量:无论从大小还是开销而言Hasor都是轻量的。Hasor基于Guice3.0作为Ioc/Aop核心支持,这使得Hasor的运行效率具备明显的竞争优势;同时Hasor的编译结果仅有几百K,即使将其依赖的所有JAR包都加到一起也不过1MB。
- 友好:Hasor的所有功能仅在几个核心API接口上实现,正因为这样基于Hasor开发项目变得简单轻松。
- 兼容:对Web情况下进行了特殊制定,在开发Web项目时候可以得到更加友好的API支持。由于Hasor仅仅是一个轻量化容器,这又使得它可以很方便的和任何框架整合到一起。
适用场景
- 如果你还在苦思如何管理软件开发环境中的各个模块,那么可以尝试使用Hasor。
- 当您的项目中存在千奇百怪的各种小工具时,Hasor可以有效的帮您管理这些工具,并且可以将这些工具转换为您项目的基础服务。
- 如果您还再为管理项目运行时产生的各种资源文件而头疼的话Hasor提供的工作空间可以帮助你解决问题。
- 利用Hasor提供的模块,可以快捷的搭建一个全新的开发框架。除了SSH或Spring之外Hasor成为又一个可选择的技术方案。
好处
- Hasor采用Guice3.0作为其DI支持,这使得在用Hasor在开发Aop/Ioc的运行效率上比Spring有很大的改进。同时Hasor有着一个类似Spring的BeanFactory接口,用来提供相似功能。
(Hasor的这种设计并不是为了兼容Spring,而是因为像BeanFactory这样的接口确实很重要。) - 配置文件方面:Hasor强化注解化开发,把配置文件彻底留给真正需要的地方。同时Hasor按照配置文件作用对其进行了进一步分类,使开发、测试、部署不同的环节之间对置文件的关注大大清晰化、明确化、单一化。不光如此Hasor还提供了对配置文件修改的动态检测,并且通过监听器可以让应用程序在第一时间将更新的配置文件载入到正在运行的项目中使它生效。而这一切都不需要重启。
- 低侵入式设计,代码污染极低。
- Hasor不要求应用程序完全依赖于Hasor,开发者可以自由的选用Hasor的部分或全部模块,甚至开发者可以动手开发自己的模块。
原则
简单、清晰、可靠、方便、快捷,可以说是Hasor在设计所有模块时的目标。Hasor从现在到未来都会遵循下面这些原则。
- 用最简的实现提供最有用的功能,不做过度设计。
- 模块职责单一化、简单化。不做“全能模块”。
- 尽量在为开发者提供一个友好、简单的API。
模块
Hasor目前是由9个明确定义的模块组成,您可以根据需要选配这些模块作为您开发环境的功能。
1. org.hasor.core
核心模块,hasor-core模块包括了:模块生命周期管理、Ioc/Aop支持、事件机制、Xml配置文件支持、工作空间、环境变量操作。
2. org.hasor.servlet
hasor-servlet模块的定位是提供基本的J2EE开发组建,其中包括了注解定义(HttpServlet、Filter、 SessionListener)、以及一个注解化的并且支持restful风格的MVC控制层框架,除此之外还提供了一个请求响应编码过滤器和一个资源装载器。这个资源装载器可以方便的处理位于(classpath、zip、filepath)下的资源请求。
3. org.hasor.icache
该模块提供了一种统一的Cache接口用来隔离应用程序和具体Cache提供商的耦合关系,开发者可以通过在方法上标注@NeedCache注解来缓存方法执行结果。该注解还可以用来设置缓存服务提供者和缓存时间等策略配置。
4. org.hasor.security
一个通用的权限控制模块。hasor-security的设计中把权限系统看作(认证,授权,控制)三个基本组件。hasor-security模块只关注控制部分的问题。
- 认证:负责确定登陆用户的身份是否合法,通过实现SecurityAuth接口来连接项目的认证体系。SecurityAuth接口的实现也十分简单,只需要实现两个用户获取方法返回一个用户对象即可。
- 授权:决定了被认证的用户具备哪些权限,通过实现SecurityAccess接口来获取被认证用户的权限集合。
- 控制:依据用户所具备的权限限制对资源访问。
由于hasor-security本身并不包含任何权限模型或者授权模型,所以它可以通过认证和授权与任何项目的权限模型相融合。无论你是基于用户角色权限,或是域用户认证,哪怕最复杂的RBAC模型。hasor-security都可以很好的与其配合。不光如此,它还支持:用户多身份登陆、临时加减用户权限、来宾用户,以及多用户系统、多授权系统下权限控制。通过同步数据缓存还可以实现单点登陆(SSO)。
5. org.hasor.view
hasor-view是一个展示层模块。它采用最新的Freemarker 2.3.19作为模板引擎,同时封装了Freemarker的相关接口。Tag接口是对Freemarker自定义标签实现的一种封装,它更加明确了标签的生命周期。通过在任意方法上标注@FmMethod注解可以方便的定义Freemarker自定义函数。不光如此在Freemarker的配置上 hasor-view模块也提供了更为强大的支持。
decorate是hasor-view模块提供的另外一个组建。它可以用来拦截response响应流,并且允许开发者重新输出响应数据。用过SiteMesh的朋友对它的工作原理不会陌生。hasor-view通过该组建提供了页面装饰器。
6. org.hasor.ds
hasor-ds是一个为应用程序提供多数据源支持的模块。
7. org.hasor.remote
远程服务调用、Services共享、RMI、以及类似DWR的功能
8. org.hasor.updown
负责处理上传下载需求的模块,使用它可以按照需要配置上传点和下载点。
9. org.hasor.ui
服务端UI框架。