Hasor框架入门(一)

1,Hasor是什么

Hasor由多个不同系列框架组合而成的一个框架体系,这些子框架的能力涵盖了 IoC、Aop、WebMVC、数据库以及其它方方面面。这一切的基础要归功于 Hasor 的插件化能力。
Hasor是一款基于Java语言的应用程序开发框架,它的核心设计目标是提供一个简单、切必要的环境给开发者。开发者可以在此基础上,通过 Hasor 强有力的粘合机制,构建出更加完善的应用场景。同时Hasor 的各种内置插件也会帮助开发者进行快速开发。

2,Hasor的作用

  1. Hasor 帮助我们设计更好的 API,它独有的框架扩展能力可以使新的能力完全无缝的集成到统一的 API
    体系中。Hasor构建了通用功能,使我们能够扩展 Hasor,而不是向核心框架添加每个特性。

Hasor
的扩展能力更像是一个乐高玩具的接口,任何人都可以通过非常简单的方式提供乐高积木,然后轻松的将它们融合到一起。在使用的过程中完全感受不到背后是多个不同的框架在协作。Hasor
API 本身就是一个很好的例子。

  1. Hasor 的目标是使开发和调试变得更容易和更快,而不是更困难和更慢。

3,Hasor的特点

Hasor 提倡开发者充分利用编程语言的优势进行三方整合和模块化设计。同时 Hasor 也主要是通过这种“微内核+插件”的方式丰富开发所需的所有功能。
决定避开 COC 原则的原因是,COC 虽然已约定的方式降低了整个框架的设计复杂度,但同时也最大限度的牺牲了框架的灵活性。缺少灵活性的框架在应用场景上会受到极大的制约。而 Hasor 的设计则更加面向底层,因此需要更多的灵活性。
Hasor 强大的灵活性表现在模块整合能力上,对于某一个领域开发方面 Hasor 依然强调并力推 COC 。小而美的核心,大而全的生态圈是 Hasor 的目标。

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

3.2 什么是COC原则

Convention over Configuration(CoC)– 惯例优于配置原则

4,Hasor架构

在这里插入图片描述

  • Core 职责是提供Bean容器、Module机制。
  • DB 提供了JDBC操作、事务管理。
  • RSF 是一个完备的分布式 RPC 服务框架。
  • Web 是一个吸收了百家所长的 Web MVC框架。
  • Land 它类似于 Zookeeper 负责提供分布式一致性的支持。
  • Center 它是 RSF 的服务治理中心。

4.1 总体功能

  1. 支持IoC、Aop、模块化(Hasor-Core)
  2. 支持模版化配置文件,让您程序打包之后通吃各种环境(Hasor-Core)
  3. 提供JDBC操作接口,支持 Result -> Object 映射(Hasor-DB)
  4. 完备的数据库事务控制能力,支持 7 种事务传播属性(Hasor-DB)
  5. 支持传统 Web MVC 开发,也支持 restful 方式(Hasor-Web)
  6. 提供Form表单验证、验证支持场景化(Hasor-Web)
  7. 开放的模版渲染接口,支持各种类型的模版引擎(Hasor-Web)
  8. 分布式 RPC 服务,支持容灾、负载均衡、集群(Hasor-RSF)
  9. 通过 Hprose 支持多协议、跨语言的 RPC 调用(Hasor-RSF)
  10. 通过服务注册中心,支持分布式服务统一治理(Hasor-RSF)
  11. 提供对某一个状态提供分布式下状态一致性支持(Hasor-Land)

4.2 发展状况

  • Hasor起源于2012年。当时尚未开源,并被应用到公司各大项目中。当时基于Guice构建,并且整合了Spring JDBC、Guice等大量三方框架。
  • 2013年9月15日,第一个Hasor版本发布。Module化的插件概念被提出,同时依赖大量减少,成为一个开源的java开发框架。
  • 2015年7月3日,1.0.0版本发布。这一年Hasor明确的发展路线,确立了“小而美的核心,大而全的生态圈”目标。
  • 2016年8月18日,2.4.3版本发布,基于2.4版本Hasor开始孕育全新的子项目 RSF。当时 Hasor 的版图还没有这么大。
  • 2017年2月21日,RSF 和 Land 被并入 Hasor 体系,同时首次公开了 Hasor 大版图的想法。

5,SpringBoot整合Hasor

5.1 添加依赖

<dependencies>
        <!--Spring-web依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--连通 SpringHasor-->
        <dependency>
            <groupId>net.hasor</groupId>
            <artifactId>hasor-spring</artifactId>
            <version>4.1.7</version>
        </dependency>
        <!--DataWayHasor生态中的一员-->
        <dependency>
            <groupId>net.hasor</groupId>
            <artifactId>hasor-dataway</artifactId>
            <version>4.1.7</version><!-- 4.1.4 包存在UI资源缺失问题 -->
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--JDBC-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    </dependencies>

5.2 创建数据库表

CREATE TABLE `interface_info` (
  `api_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `api_method` varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
  `api_path` varchar(512) NOT NULL COMMENT '拦截路径',
  `api_status` int(2) NOT NULL COMMENT '状态:0草稿,1发布,2有变更,3禁用',
  `api_comment` varchar(255) DEFAULT NULL COMMENT '注释',
  `api_type` varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL',
  `api_script` mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx',
  `api_schema` mediumtext COMMENT '接口的请求/响应数据结构',
  `api_sample` mediumtext COMMENT '请求/响应/请求头样本数据',
  `api_option` mediumtext COMMENT '扩展配置信息',
  `api_create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `api_gmt_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的API';
CREATE TABLE `interface_release` (
  `pub_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Publish ID',
  `pub_api_id` int(11) NOT NULL COMMENT '所属API ID',
  `pub_method` varchar(12) NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',
  `pub_path` varchar(512) NOT NULL COMMENT '拦截路径',
  `pub_status` int(2) NOT NULL COMMENT '状态:0有效,1无效(可能被下线)',
  `pub_type` varchar(24) NOT NULL COMMENT '脚本类型:SQL、DataQL',
  `pub_script` mediumtext NOT NULL COMMENT '查询脚本:xxxxxxx',
  `pub_script_ori` mediumtext NOT NULL COMMENT '原始查询脚本,仅当类型为SQL时不同',
  `pub_schema` mediumtext COMMENT '接口的请求/响应数据结构',
  `pub_sample` mediumtext COMMENT '请求/响应/请求头样本数据',
  `pub_option` mediumtext COMMENT '扩展配置信息',
  `pub_release_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间(下线不更新)',
  PRIMARY KEY (`pub_id`),
  KEY `idx_interface_release` (`pub_api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 发布历史。';

5.3 编写代码以及配置文件

@DimModule  // Hasor 中的标签,表明是一个Hasor的model
@Component  // Spring 中的标签,表明是一个组件
public class HasorComponent implements SpringModule {

    private final DataSource dataSource;

    public HasorComponent(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    /**
     * Hasor 启动的时候会调用 loadModule 方法,
     * 在这里再把 DataSource 设置到 Hasor 中。
     * @param apiBinder
     * @throws Throwable
     */
    @Override
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource));
    }

}
@EnableHasor
@EnableHasorWeb  // 将 hasor-web 配置到 Spring 环境中,Dataway 的 UI 是通过 hasor-web 提供服务。
@SpringBootApplication
public class HasorApplication {

    public static void main(String[] args) {
        SpringApplication.run(HasorApplication.class, args);
    }

}
server:
  port: 9800

spring:
  profiles:
    active: dev
# 是否启用 Dataway 功能(必选:默认false)
HASOR_DATAQL_DATAWAY: true

# 是否开启 Dataway 后台管理界面(必选:默认false)
HASOR_DATAQL_DATAWAY_ADMIN: true

# dataway  API工作路径(可选,默认:/api/)
HASOR_DATAQL_DATAWAY_API_URL: /interface/

# dataway-ui 的工作路径(可选,默认:/interface-ui/)
HASOR_DATAQL_DATAWAY_UI_URL: /config/

# SQL执行器方言设置(可选,建议设置)
HASOR_DATAQL_FX_PAGE_DIALECT: mysql
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

5.4 启动程序

输入http://127.0.0.1:9800/config/,即可打开DatawayAPI配置页面
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值