# beantools **Repository Path**: zbone/beantools ## Basic Information - **Project Name**: beantools - **Description**: 处理java属性等操作 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2019-04-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # beantools - java ------------------ ## 说明 beantool是一个集工厂设计模式、建造者设计模式、单例设计模式并实现了高并发、高可复用、高内聚、低耦合的开源框架。你可以直接嵌套在你的spring、spring mvc等java框架中。 ---- ## 网址 你可以链接我司的网站,查看我司的其他产品,链接地址为:https://www.superjson.com/。 ---- ## 使用框架。 - 文本你可以将代码下载下来,作为jar包的方式引入到你的项目中。 - 你可以通过maven的方式引入项目: ``` com.beantools beantools 1.1.0-SNAPSHOT ``` ----- ## 介绍 ----- - 深度克隆 在实际项目开发的过程中,我们通过curd操作得到对象或者对象的集合。如果自定义的某个实体类,没有关联和依赖关系,不需要克隆也能得到。 然而,用户自定义的实体类往往多关联和多依赖,比如一个用户自定义的项目实体类,其关联用户实体类,表明这个项目是谁的。项目进程表关联项目实体类,表示这个项目到了哪个阶段。此时,我们就需要创建一个中间实体类,来存储用户的某些字段,项目的某些字段,项目中间表的某些字段,如何把三张表的字段值存储到中间表中。 我们就利用了深度克隆。深度克隆需要句柄,用句柄来操作对象字段值。如以下代码: ``` @Test public void testClone() { Student student = new Student(); student.setName("jack zhu"); Address address = new Address(); address.setDetail("浙江省杭州市西湖区"); address.setProvince("浙江省"); student.setAddress(address); String[] strs = {"address.detail:detail", "name"}; StudentAddress studentAddress = Clone.getInstance().resultClone(strs, StudentAddress.class, student); System.out.println(studentAddress); } ``` 有时,curd操作会返回对象集,该框架提供了内置的获取克隆集的方法,如以下代码: ``` @Test public void testCloneList() { List list = new ArrayList(); for (int i = 0; i < 5; i++) { Student student = new Student(); student.setName("jack zhu" + i); Address address = new Address(); address.setDetail("浙江省杭州市西湖区"); address.setProvince("浙江省"); student.setAddress(address); list.add(student); } String[] strs = {"address.detail:detail", "name"}; Clone clone=Clone.getInstance(); List studentAddresses = clone.resultOrderCloneToList( strs, StudentAddress.class, list); System.out.println(studentAddresses); } ``` ---- - 对象属性值 前后端进行交互的过程中,往往需要过滤不需要的字段值,只把前端需要的字段过滤给前端,尤其是针对多关联和多依赖的对象。可以结合fastjson、orgJson、jsckson等框架,获取过滤后的对象值,如以下代码: ``` @Test public void testGetProperty() { Student student = new Student(); student.setName("zhubaoya"); entity.Address address = new entity.Address(); address.setDetail("浙江省杭州市西湖区"); student.setAddress(address); Object property = instance.getProperty("address.detail"); Object property1 = instance.getProperty("name"); System.out.println(property); System.out.println(property1); } ``` 同时,也可以像新生的对象填充值,这个方法可以实现自定义的克隆方法,如以下代码: ``` @Test public void testSetProperty() { Student student = new Student(); student.setName("name"); Property instance = Property.getInstance(); instance.setProperty("address.course.name", "浙江省杭州市西湖区",student); instance.setProperty("address.detail", "浙江省杭州市西湖区", student); instance.setProperty("address.province", "浙江省", student); instance.setProperty("name", "zhubaoya", student); System.out.println(student.getAddress().getCourse().getName() + "," + student.getAddress().getProvince() + "," + student.getName()); } ``` ----- ## 非空注解 在自定义类中,如果你使用hibernate框架保存对象,可以使用hibernate的非空注解。但是,如果不是利用hibernate保存的对象或对象集,我们需要验证类的某些属性不能为空,或指定某些对象的属性可以为空等等。这时,你就可以使用这个框架: ``` @Test public void test(){ Student student=new Student(); student.setName("jack zhu"); NotNullHandler.getInstance().validate(student); } public class Student extends BaseObj { @NotNull private Address address; public Student() { } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } } ``` ------- ## 枚举集 我们在操作枚举对象时,需要获取枚举对象的集合,这时,你可以使用这个框架。 1. 你需要在properties中配置枚举所在包的路径。或者,你直接写死框架的方法中,但这种方式不友好。 ``` #枚举接送的配置路径 enum.package.path=com.showpro.shared.enums ``` 2. 在接口方法中,调用以下的方法: ``` /** * 返回指定类型的枚举,比如com.superjson.com.beantools.shared.enums */ @RequestMapping(value = "/listByBeantools", method = RequestMethod.GET) public Result listEnumsByBeantools(String className) { JSONObject body = loadEnumSinglePackage(enumPackagePath, className); return ResultUtil.buildSuccess(body); } ``` **_ 该框架涉及到的其他方法,可以在实际开发的过程中探索。对于程序员来说,我们应该具有探索精神。_** :smile: :smiley: