Hasor开发手册

教程说明:

Hasor 是一款基于 Java  语言的应用程序开发框架,它的核心设计目标是提供一个简单、且必要的环境给开发者。开发者可以在此基础上,通过 Hasor 强有力的粘合机制,构建出更加完善的应用场景。同时 Hasor 的各种内置插件也会帮助开发者进行快速开发。而所有内置插件,在初始化的时都做了智能加载,只有用到了它们才会被加载到框架中。否则这些内置插件在初始化期间就会放弃加载自己。基于目前 Hasor 内核上已经发展出 DB、Web、Restful 三大基础框架。


设计思想


Hasor 提倡开发者充分利用编程语言的优势进行三方整合和模块化设计。同时 Hasor 也主要是通过这种“ 微内核+插件 ”的方式丰富开发所需的所有功能。


决定避开 COC 原则的原因是, COC 虽然已约定的方式降低了整个框架的设计复杂度,但同时也最大限度的牺牲了框架的灵活性。缺少灵活性的框架在应用场景上会受到极大的制约。而 Hasor 的设计则更加面向底层,因此需要更多的灵活性。

Hasor 强大的灵活性表现在模块整合能力上,对于某一个领域开发方面 Hasor 依然强调并力推 COC 。小而美的核心,大而全的生态圈是 Hasor 的目标。


架构





特性


  • 01. IoC/Aop编程模型,设计精巧,使用简单。
  • 02. COC原则的最佳实践,‘零’配置文件。
  • 03. 微内核 + 扩展,基于内核已发展出 DB、Web、Restful 三大独立的基础框架。
  • 04. 真正的零开发,解析项目特有的自定义 Xml 配置。
  • 05. 支持模板化配置文件,程序打包之后一套配置通吃(日常、预发、线上)以及其它各种环境。
  • 06. 完备的 JDBC 操作接口,支持 Result -> Object 映射。
  • 07. 提供三种途径控制事务,支持七种事务传播属性,标准的事务隔离级别。
  • 08. 支持多数据源、及多数据源下的事务控制(非JPA)。
  • 09. 内置事件机制,方便进行业务深度解耦,使业务逻辑更佳清晰。
  • 10. 支持 Web 类型项目开发,提供 restful 风格的 mvc 开发方式。
  • 11. 支持Form表单验证、支持场景化验证。
  • 12. 提供开放的模版渲染接口,支持各种类型的模版引擎。
  • 13. 提供丰富的工具箱,帮助您快速开发,有了它您甚至不需要 apache-commons。
  • 14. 支持log4j、logback等多种主流日志框架。
  • 15. 体积小,无第三方依赖。


发展状况


Hasor 起源于2012年,并在2013年初具雏形。当时尚未开源,并被应用到公司个大项目中。那个时候 Hasor 还是基于Guice构建,并且整合了Spring JDBC、Guice Servlet等大量三方框架。还有少量自建功能,例如:WebMVC。当时整个框架还未从软件产品中完全剥离出来,其中最基本的要素经过打包会产生约 130MB的 JAR包依赖。与目前相比显得无比臃肿。


随后2013年开始,通过对整套框架的重新梳理。 Hasor 才得以从项目中脱离出来成为独立的框架,依赖也随时聚减。同年开始计划开源版本的实现,也就是如今的 Hasor 。


2013年9月15日,0.0.1版本,第一个版本被推送到Maven中央仓库, Hasor 的雏形被确立,Module化的插件概念被提出,依赖减少到只有Guice和slf4j。


2014年7月26日,0.0.9版本被推送到Maven中央仓库。经历多个版本迭代最后一个核心依赖Guice也被去除。而此时 Hasor 已经拥有了Web、JDBC、和完整的数据库事务能力。在这个阶段中 Hasor 曾经在Guice、Spring之间摇摆不定,也对未来的路线和定位发生过几次重大的改变。

2015年7月3日,1.0.0版本发布,这是一个里程碑。首先 1.0 开始 Hasor 许多零碎的项目合并到了一起(all-in行动),同时 Hasor 的发展方向和目标也更加明确。同年11月27日,2.0版本发布。 Hasor 确立了“小而美的核心,大而全的生态圈”的目标。


2016年8月18日,2.4.3版本,经过持续的沉淀、整合、优化。 Hasor 越来越稳定可靠,基于2.4版本 Hasor 开始孕育全新的子项目  Hasor-RSF (分布式RPC)。


相关资源



温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }