# kinyx-framework **Repository Path**: Kinyx/kinyx-framework ## Basic Information - **Project Name**: kinyx-framework - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-25 - **Last Updated**: 2022-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # kinyx-framework ## 介绍 ### 1、目标 + 尽可能让业务开发使用更少的代码完成更多的功能 + 尽可能消除业务开发中的重复代码 + 尽可能让业务开发避免低级bug ### 2、功能 + 基础工具类 + 基础定义 + 插件式开发的日志 + 统一的异常处理 + 统一的校验注解实现(javax.validation:validation-api) + 统一的国际化处理 + 统一的API输入输出参数定义 ## 软件架构 |框架项目|三方依赖|描述| |----|----|----| |kinyx-framework|org.projectlombok:lombok|MAVEN项目的parent项目| |[kinyx-framework-lang](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-lang)|javax.validation:validation-api|主要约定功能定义与实现、不依赖其它三方的工具类| |[kinyx-framework-log-log4j2](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-log-log4j2)|org.apache.logging.log4j:log4j-core|插件扩展实现(log4j2)| |[kinyx-framework-data-jackson](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-data-jackson)|com.fasterxml.jackson.dataformat:jackson-dataformat|JSON、XML相关工具类| |[kinyx-framework-jexl](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-jexl)|org.apache.commons:commons-jexl3|执行表示代码的字符串,从而可以通过配置字符串代码的方式实现一些功能,如随机值配置等。| |[kinyx-framework-crawler](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-crawler)|org.jsoup:jsoup|爬虫相关工具类| |[kinyx-framework-db](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-db)|javax.persistence:javax.persistence-api|数据库相关| ## 使用说明 + 1、pom.xml中配置parent,使用框架定义的pom。 ```xml com.kinyx.projects kinyx-project 1.0.0.RELEASE ../pom.xml ``` + 2、pom.xml中配置build,使用打包插件。 ```xml org.apache.maven.plugins maven-shade-plugin ``` + 3、创建com.kinyx.KMain.java代码,并声明主函数。 ```java package com.kinyx; public class KMain { public static void main(final String[] args) { } } ``` + 4、在主函数中做自定义实现。 + 5、将项目打包,mvn install + 6、启动项目,java -jar target/xxx.jar ## 框架实现 ### 1、工具类 |package|命名规则| |----|----| |按照功能类型归纳|以K开头,以Utils结尾或名词性结尾。| #### 1.1、常用类型辅助工具类 + [com.kinyx.framework.utils.KArrayUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KArrayUtils.java) 数组工具类 + [com.kinyx.framework.utils.KCalendarUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KCalendarUtils.java) 日历工具类 + [com.kinyx.framework.utils.KCharUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KCharUtils.java) 字符工具类 + [com.kinyx.framework.utils.KDateTimeUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KDateTimeUtils.java) 日期时间工具类 + [com.kinyx.framework.utils.KEnumUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KEnumUtils.java) 枚举工具类 + [com.kinyx.framework.utils.KListUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KListUtils.java) 列表工具类 + [com.kinyx.framework.utils.KMapUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KMapUtils.java) 集合工具类 + [com.kinyx.framework.utils.KMatcherUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KMatcherUtils.java) 匹配工具类 + [com.kinyx.framework.utils.KNumberUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KNumberUtils.java) 数字工具类 + [com.kinyx.framework.utils.KStringUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/utils/KStringUtils.java) 字符串工具类 #### 1.2、反射相关工具类 + [com.kinyx.framework.reflect.KAnnotationUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KAnnotationUtils.java) 注解工具类 + [com.kinyx.framework.reflect.KBeanUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KBeanUtils.java) JavaBean工具类 + [com.kinyx.framework.reflect.KClassScanner](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KClassScanner.java) 类扫描工具类 + [com.kinyx.framework.reflect.KClassUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KClassUtils.java) 类工具类 + [com.kinyx.framework.reflect.KFieldUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KFieldUtils.java) 字段工具类 + [com.kinyx.framework.reflect.KTypeConverter](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/reflect/KTypeConverter.java) 类型转换工具类 #### 1.3、文件处理工具类 + [com.kinyx.framework.file.KFileReader](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KFileReader.java) 文件读取工具类 + [com.kinyx.framework.file.KFileUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KFileUtils.java) 文件工具类 + [com.kinyx.framework.file.KFileWriter](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KFileWriter.java) 文件写入工具类 + [com.kinyx.framework.file.KI18NUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KI18NUtils.java) 国际化工具类 + [com.kinyx.framework.file.KPathUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KPathUtils.java) 路径工具类 + [com.kinyx.framework.file.KPropertiesReader](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KPropertiesReader.java) 属性文件读取工具类 + [com.kinyx.framework.file.KReader](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KReader.java) 读取工具类 #### 1.5、加密解密工具类 + [com.kinyx.framework.security.KBASE64](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KBASE64.java) BASE64编码/解码工具类 + [com.kinyx.framework.security.KMD5](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KMD5.java) MD5加密工具类 + [com.kinyx.framework.security.KOTP](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KOTP.java) OTP编码工具类 + [com.kinyx.framework.security.KRSA](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/security/KRSA.java) RSA编码工具类 #### 1.5、图像处理工具类 + [com.kinyx.framework.image.KImageCropper](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/image/KImageCropper.java) 图片修剪工具类 + [com.kinyx.framework.image.KImageDrawer](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/image/KImageDrawer.java) 图片绘画工具类 + [com.kinyx.framework.image.KImageUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/image/KImageUtils.java) 图片工具类 #### 1.6、树形结构相关工具类 + [com.kinyx.framework.tree.KCodeUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/tree/KCodeUtils.java) 编码工具类 + [com.kinyx.framework.tree.KTreeUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/tree/KTreeUtils.java) 树形结构工具类 #### 1.7、其它业务型工具类 + [com.kinyx.framework.business.KAreaUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KAreaUtils.java) 区域工具类 + [com.kinyx.framework.business.KHexUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KHexUtils.java) 十六进制工具类 + [com.kinyx.framework.business.KHTMLUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KHTMLUtils.java) HTML工具类 + [com.kinyx.framework.business.KRandomUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KRandomUtils.java) 随机工具类 + [com.kinyx.framework.business.KURLConnection](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/business/KURLConnection.java) 连接工具类 #### 1.8、其它业务型工具类(扩展实现包) + [kinyx-framework-data-jackson](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-data-jackson) + [com.kinyx.framework.data.KJsonUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils.java) JSON工具类 + [com.kinyx.framework.data.KXmlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils.java) XML工具类 + [com.kinyx.framework.data.KJsonUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils4Jackson.java) JSON工具类 + [com.kinyx.framework.data.KXmlUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils4Jackson.java) XML工具类 + [kinyx-framework-jexl](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-jexl) + [com.kinyx.framework.jexl.KJexlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KJexlUtils.java) Jexl工具类 + [com.kinyx.framework.jexl.KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java) 随机工具类 + [kinyx-framework-crawler](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-crawler) + [com.kinyx.framework.crawler.KCrawler](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KCrawler.java) 抓取工具类 + [com.kinyx.framework.crawler.KSoupUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KSoupUtils.java) HTML工具类 + [kinyx-framework-db](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-db) + [com.kinyx.framework.db.daos.JDBCTool](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-db/src/main/java/com/kinyx/framework/db/daos/JDBCTool.java) JDBC工具类 ### 2、对象类 #### 2.1、Java增强实现对象 |package|命名规则|实现逻辑| |----|----|----| |归入javax同名包|以X开头同名类|继承自Java原对象,不修改Java原对象的任何方法,只增加方法。| + [javax.util.XArrayList](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/javax/util/XArrayList.java) 扩展实现ArrayList + [javax.util.XHashMap](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/javax/util/XHashMap.java) 扩展实现HashMap #### 2.2、Java重写实现对象 |package|命名规则|实现逻辑| |----|----|----| |归入javax同名包|以Y开头同名类|内部持有Java原对象,对外提供Java原对象提供的方法,并进行特定的实现。| + [javax.math.YBigDecimal](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/javax/math/YBigDecimal.java) 数字对象 #### 2.3、自定义对象 |package|命名规则| |----|----| |com.kinyx.framework.bean|正常命名| + [com.kinyx.framework.bean.DKHashMap](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/DKHashMap.java) 双键集合 + [com.kinyx.framework.bean.GetArgs](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/GetArgs.java) GET请求参数 + [com.kinyx.framework.bean.KeyValues](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/KeyValues.java) 键值对 + [com.kinyx.framework.bean.KImageInfo](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/KImageInfo.java) 图片对象 + [com.kinyx.framework.bean.MainArgs](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/MainArgs.java) 主参数处理器 + [com.kinyx.framework.bean.PackageScaner](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/PackageScaner.java) 包扫描工具 + [com.kinyx.framework.bean.StringFormatter](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/StringFormatter.java) 字符串格式化对象 + [com.kinyx.framework.bean.TreeNode](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/bean/TreeNode.java) 树节点对象 ### 3、日志 框架对日志进行了基础定义以及实现,采用插件式开发方式,即对业务代码提供一致的用法,插入哪个实现插件,则将使用该插件的实现对日志进行处理。 #### 3.1、扩展实现逻辑 + 1、提供[com.kinyx.framework.log.Log](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/Log.java)的实现类 + 2、提供[com.kinyx.framework.log.LogFactory](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/LogFactory.java)的实现类 + 3、提供配置文件[configs-log-impl.properties](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/resources/configs-log-impl.properties),并配置log.LogFactory=com.kinyx.framework.log.LogFactory的实现类。 #### 3.2、默认插件实现(控制台输出),在kinyx-framework-lang项目中。 + [com.kinyx.framework.log.Log4Console](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/Log4Console.java) + [com.kinyx.framework.log.LogFactory4Console](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/log/LogFactory4Console.java) #### 3.3、插件扩展实现(log4j2),在kinyx-framework-log-log4j2项目中,如需使用该插件,只需在MAVEN项目中配置依赖即可。 + [com.kinyx.framework.log.Log4log4j2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-log-log4j2/src/main/java/com/kinyx/framework/log/Log4log4j2.java) + [com.kinyx.framework.log.LogFactory4Log4j2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-log-log4j2/src/main/java/com/kinyx/framework/log/LogFactory4Log4j2.java) ```xml com.kinyx.framework kinyx-framework-log-log4j2 ``` #### 3.4、业务代码使用 ```java import com.kinyx.framework.log.Log; import com.kinyx.framework.log.Logger; Log logger = Logger.getLog(KMain.class); if(logger.isTraceEnabled()){ logger.trace(Object message); logger.trace(Object message, Throwable t); } if(logger.isDebugEnabled()){ logger.debug(Object message); logger.debug(Object message, Throwable t); } if(logger.isInfoEnabled()){ logger.info(Object message); logger.info(Object message, Throwable t); } if(logger.isWarnEnabled()){ logger.warn(Object message); logger.warn(Object message, Throwable t); } if(logger.isErrorEnabled()){ logger.error(Object message); logger.error(Object message, Throwable t); } if(logger.isFatalEnabled()){ logger.fatal(Object message); logger.fatal(Object message, Throwable t); } ``` ### 4、异常 框架内部实现将捕获所有已声明的异常,并进行处理,如需业务处理,则将抛出[com.kinyx.framework.KRuntimeException](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/exception/KRuntimeException.java)(指定错误编码)。 ### 5、校验注解 框架依赖javax.validation:validation-api进行了扩展实现。 #### 5.1、可配置校验注解 采用正则表达式匹配校验逻辑。如默认的正则表达式不能满足业务需求,无需修改源代码,只需创建配置文件configs-constraints.properties,在配置文件中配置对应的正则表达式即可。 + [com.kinyx.framework.constraints.AppKey](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/AppKey.java) + [com.kinyx.framework.constraints.BASE64](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/BASE64.java) + [com.kinyx.framework.constraints.Cellphone](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Cellphone.java) + [com.kinyx.framework.constraints.Chinese](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Chinese.java) + [com.kinyx.framework.constraints.Email](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Email.java) + [com.kinyx.framework.constraints.ID](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/ID.java) + [com.kinyx.framework.constraints.IDCard](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/IDCard.java) + [com.kinyx.framework.constraints.Locale](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Locale.java) + [com.kinyx.framework.constraints.LoginName](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/LoginName.java) + [com.kinyx.framework.constraints.MD5](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/MD5.java) + [com.kinyx.framework.constraints.SecurityCode](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/SecurityCode.java) + [com.kinyx.framework.constraints.SendID](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/SendID.java) + [com.kinyx.framework.constraints.Text](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Text.java) + [com.kinyx.framework.constraints.Token](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Token.java) + [com.kinyx.framework.constraints.URL](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/URL.java) + [com.kinyx.framework.constraints.UUID](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/UUID.java) + [com.kinyx.framework.constraints.WindowsPath](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/WindowsPath.java) #### 5.2、枚举类校验注解 使用枚举定义的参数,只能输入枚举对应的值,因而该类注解不可进行自定义配置。 + [com.kinyx.framework.constraints.ClientType](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/ClientType.java) + [com.kinyx.framework.constraints.UsingStatus](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/UsingStatus.java) #### 5.3、自定义校验注解 该注解提供regex参数进行自定义配置,只需在使用时,自定义配置即可。 + [com.kinyx.framework.constraints.Validator](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/constraints/Validator.java) ### 6、国际化 #### 6.1、工具类([KI18NUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/file/KI18NUtils.java)) ##### 6.1.1、使用 ```java import java.util.Locale; import java.util.Properties; import com.kinyx.framework.file.KI18NUtils; import com.kinyx.framework.file.KPropertiesReader; Locale locale = Locale.SIMPLIFIED_CHINESE; String category = "UsingStatus"; String key = "USING"; String defaultValue = null; Properties properties = KI18NUtils.getProperties(locale, category); String value = KPropertiesReader.getStringValue(properties, key, defaultValue); ``` ##### 6.1.2、实现逻辑伪代码 ```java 读取配置文件[/i18n/{locale}/{category}.properties] if (读取成功) {返回读取结果} // 读取失败,尝试读取类似配置。 if (locale.equals(Locale.CHINESE)) {// 中文,尝试读取简体中文对应的配置文件。 读取配置文件[/i18n/zh_CN/{category}.properties] if (读取成功) {返回读取结果} 读取失败返回null } else {// 其它,尝试读取语言对应的配置文件。 读取配置文件[/i18n/locale.getLanguage()/{category}.properties] if (读取成功) {返回读取结果} 读取失败返回null } ``` ##### 6.1.3、示例 ###### 目录结构 + resources + i18n + zh + A.properties + B.properties + zh_CN + A.properties + C.properties + fr + A.properties + B.properties + fr_CA + A.properties + C.properties ###### 6.1.3.1、category == A + KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "A"); + 读取配置文件【/i18n/zh_CN/A.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.CHINESE, "A"); + 读取配置文件【/i18n/zh/A.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.CANADA_FRENCH, "A"); + 读取配置文件【/i18n/fr_CA/A.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.FRENCH, "A"); + 读取配置文件【/i18n/fr/A.properties】成功 + 返回读取结果 ###### 6.1.3.2、category == B + KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "B"); + 读取配置文件【/i18n/zh_CN/B.properties】失败 + 读取配置文件【/i18n/zh/B.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.CHINESE, "B"); + 读取配置文件【/i18n/zh/B.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.CANADA_FRENCH, "B"); + 读取配置文件【/i18n/fr_CA/B.properties】失败 + 读取配置文件【/i18n/fr/B.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.FRENCH, "B"); + 读取配置文件【/i18n/fr/B.properties】成功 + 返回读取结果 ###### 6.1.3.3、category == C + KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "C"); + 读取配置文件【/i18n/zh_CN/C.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.CHINESE, "C"); + 读取配置文件【/i18n/zh/C.properties】失败 + 读取配置文件【/i18n/zh_CN/C.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.CANADA_FRENCH, "C"); + 读取配置文件【/i18n/fr_CA/C.properties】成功 + 返回读取结果 + KI18NUtils.getProperties(Locale.FRENCH, "C"); + 读取配置文件【/i18n/fr/C.properties】失败 + 返回null ###### 6.1.3.4、category == D + KI18NUtils.getProperties(Locale.SIMPLIFIED_CHINESE, "D"); + 读取配置文件【/i18n/zh_CN/D.properties】失败 + 读取配置文件【/i18n/zh/D.properties】失败 + 返回null + KI18NUtils.getProperties(Locale.CHINESE, "D"); + 读取配置文件【/i18n/zh/D.properties】失败 + 读取配置文件【/i18n/zh_CN/D.properties】失败 + 返回null + KI18NUtils.getProperties(Locale.CANADA_FRENCH, "D"); + 读取配置文件【/i18n/fr_CA/D.properties】失败 + 读取配置文件【/i18n/fr/D.properties】失败 + 返回null + KI18NUtils.getProperties(Locale.FRENCH, "D"); + 读取配置文件【/i18n/fr/D.properties】失败 + 返回null #### 6.2、枚举定义([I18NEnum](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/enums/I18NEnum.java))&简体中文定义([IEnum_zh_CN](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/enums/IEnum_zh_CN.java)) ##### 6.2.1、说明 在国内业务开发中,通常情况下,默认的国际化都是简体中文。 通过实现中文接口的方式,可直接将国际化的信息进行配置。 其它国际化情况下,再通过配置文件实现。 这样即简化了开发流程(不需要单独配置简体中文的配置文件),又同时支持国际化实现。 且最常用的简体中文可直接取值,无需读取配置文件,效率上也将显著提高。 ##### 6.2.2、使用&示例 详见[单元测试代码](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/test/java/com/kinyx/framework/enums/I18NEnum_Tester.java) ### 7、统一的API输入输出参数定义 #### 7.1、输入参数[InData\](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/InData.java) 将API定义的参数(userDatas)外包装一层,以实现统一约定的参数(sysDatas、pageDatas)传输。 + [SysData](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/SysData.java) sysDatas 框架约定数据。API必须出入的数据,用于确定请求端的相关信息。 + String sendId 唯一标识,由发送方设定值。 + String receiveId 唯一标识,由接收方设定值。 + Date sendTime 发送时间,由发送方设定值。 + Date receiveTime 接收时间,由接收方设定值。 + String appKey 客户端唯一标识 + String clientType 客户端类型 + Byte versionX 客户端版本号(大版本号) + Byte versionY 客户端版本号(中版本号) + Short versionZ 客户端版本号(小版本号) + String token 令牌 + [InPageData](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/InPageData.java) pageDatas 分页信息数据。查询分页数据API或列表数据API时使用。 + int pageNumber 页面编号(从0开始)(仅分页查询时使用) + int pageSize 页面大小(小于0时,列表查询时表示不限制;分页查询时将修改为默认页面大小;) + D userDatas 用户信息数据。API定义的参数。 #### 7.2、输出参数[OutData\](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/vo/OutData.java) 将API定义的结果数据(datas)外包装一层,以实现统一约定的参数(errorCode、errorMessage)传输。 + int errorCode 错误编码。全局唯一编码。0:成功;负数:框架内部定义错误;10000-:框架实现层定义错误;10000+:业务自定义错误; + String errorMessage 错误信息。框架根据错误编码将会进行国际化处理。 + D datas 数据。API定义的结果数据。 ### 8、扩展实现 #### 8.1、[kinyx-framework-data-jackson](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-data-jackson) 提供统一功能的工具类 + [com.kinyx.framework.data.KJsonUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils.java) JSON工具类 + [com.kinyx.framework.data.KXmlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils.java) XML工具类 提供特殊功能的工具类 + [com.kinyx.framework.data.KJsonUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KJsonUtils4Jackson.java) JSON工具类 + [com.kinyx.framework.data.KXmlUtils4Jackson](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/KXmlUtils4Jackson.java) XML工具类 提供配置文件[configs-jackson.properties](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/resources/configs-jackson.properties),并配置ObjectMapperFactory=[com.kinyx.framework.data.ObjectMapperFactory](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-data-jackson/src/main/java/com/kinyx/framework/data/ObjectMapperFactory.java)的实现类。 #### 8.2、[kinyx-framework-jexl](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-jexl) 提供特殊功能的工具类 + [com.kinyx.framework.jexl.KJexlUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KJexlUtils.java) Jexl工具类 + [com.kinyx.framework.jexl.KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java) 随机工具类 + 创建随机对象时,首先读取字段上是否配置有随机表达式注解([com.kinyx.framework.annotation.RandomExpression](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-lang/src/main/java/com/kinyx/framework/annotation/RandomExpression.java)),如果有配置注解,则读取注解值,如果没有配置注解,则取该类型默认的随机表达式值(已经实现了基本类型及其封装类型、字符串类型)。 + 如希望补充某类型的默认随机表达式,可使用[KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java).addDefaultExpression(Class, String)方法添加默认随机表达式。 + 如随机表达式中需要使用更多的参数对象,需使用[KRandomUtils2](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-jexl/src/main/java/com/kinyx/framework/jexl/KRandomUtils2.java).addMappingParam(String, Object)方法添加映射参数。 #### 8.3、[kinyx-framework-crawler](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-crawler) 提供特殊功能的工具类 + [com.kinyx.framework.crawler.KCrawler](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KCrawler.java) 抓取工具类 + [com.kinyx.framework.crawler.KSoupUtils](https://gitee.com/Kinyx/kinyx-framework/blob/master/kinyx-framework-crawler/src/main/java/com/kinyx/framework/crawler/KSoupUtils.java) HTML工具类 #### 8.4、[kinyx-framework-db](https://gitee.com/Kinyx/kinyx-framework/tree/master/kinyx-framework-db) + JDBC功能实现 + JPA功能实现(尽可能兼容H实现) + 无限制多数据库实现 + 无限制数据库方言实现 + Java代码方式书写SQL语句