# 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: