前言
笔者在前几篇博客中对MiniBus做了一些简单的介绍,包括MiniBus的目的、应用场景、使用方式等。那么从本章开始,笔者将会对MiniBus进行更为细致的讲解。如果感兴趣的朋友,或者正在寻找Bean自动赋值组件的朋友请耐心听笔者讲解。
目录
一、MiniBus简介;
二、下载与安装MiniBus;
三、逐行标记实现字段的自动赋值;
四、定义字段备用名称与备用名称组;
五、所有字段的自动赋值;
六、MiniBus性能测试;
一、MiniBus简介
MiniBus是一个体系结构中立、简单灵活、性能高效,且无需依赖于任何Web容器运行的Bean自动赋值组件。那么什么是自动赋值呢?大家思考下,在实际的开发过程中,开发人员经常需要将一个POJO中的字段赋值到另外一个POJO中的字段中,一般来说我们都是直接采用Set的方式手动赋值,不过一旦字段多达几十个的时候,这就纯粹成了“体力活”,并且伴随着一定的风险。
并且这种应用场景时常出现在数据库实体Bean与POJO之间。当我们在使用ORM框架后,实体Bean无疑对应的就是数据库表,那么表的查询记录必然就会存储在实体Bean中,但往往我们需要将存储在实体Bean中的值重新存储于POJO字段中进行传递,不可能直接将实体Bean用作返回。那么这个时候我们就需要一种机制,自动帮我们实现这些繁琐的赋值操作。
MiniBus诞生的目的已经很明显了,你无需再关心这些基础作业层,尽可能的关注业务即可。MiniBus在使用上相当方便,你可能只需要花上几分钟便能掌握该组件的使用,并且你完全不用担心MiniBus是否稳定,因为MiniBus最新版本的单元测试覆盖率已经达到86%以上,所以你完全抛开后顾之忧。
MiniBus1.0.3版本核心代码单元测试覆盖率:
二、下载与安装MiniBus
大家可以登录http://code.google.com/p/sapphire-cache/downloads/detail?name=minibus-1.0.3-RC1.jar&can=2&q=#makechanges下载MiniBus的最新版本,目前MiniBus的最新版本为1.0.3-RC1稳定版。
当大家成功下载好MiniBus后,便可以引入至项目中。目前MiniBus暂时没有开源,不过在后续版本中,MiniBus将会实现开源,希望大家谅解。
三、逐行标记实现字段的自动赋值
一般来说我们将字段需要被赋值的POJO称之为目标对象,而赋值对象我们则称之为源对象。在使用MiniBus进行源对象与目标对象赋值过程中,我们需要明确几个非常重要的概念:
1、目标对象必须标记@Assignment注解;
2、MiniBus支持部分字段与所有字段的自动赋值操作;
3、部分字段赋值必须为字段标记@Paramater注解,所有字段赋值必须对目标对象标记@AutoParameters注解;
4、目标对象字段“无需”与源对象字段名称保持一致;
咱们首先来看看,如何使用MiniBus实现部分字段的自动赋值操作。
定义源对象:
public class UserInfoBean { private int id; private String name; /* 此处省略set和get方法 */ }
接着我们为目标对象标记好@Assignment注解,并且在需要被赋值的字段上标记@Paramater注解。如果你希望目标对象中的某些字段不被自动赋值,则无需标记@Paramater注解。
定义目标对象:
@Assignment public class UserInfoBean2 { @Paramater private int id; @Paramater private String name; /* 此处省略set和get方法 */ }
当定义好目标对象与源对象后,我们接着只需要使用MiniBus提供的AnnotationContext抽象类的setParam(T goalObject, K sourceObject)方法即可实现POJO之间的自动赋值操作。
setParam(T goalObject, K sourceObject)方法包含2个参数,第一个为目标对象,第二个则为源对象,所以大家在传递参数的时候,务必保持先后顺序,否则将无法实现字段的自动赋值。
使用AnnotationContext实现POJO之间的自动赋值:
/** * @param args */ public static void main(String[] args) { UserInfoBean userInfoBean = new UserInfoBean(); userInfoBean.setId(1); userInfoBean.setName("MiniBus"); UserInfoBean2 userInfoBean2 = new UserInfoBean2(); /* 执行自动赋值操作 */ AnnotationContext.setParam(userInfoBean2, userInfoBean); System.out.println(userInfoBean2.getId()); System.out.println(userInfoBean2.getName()); }
四、定义字段备用名称与备用名称组
上述程序示例,笔者演示了如何使用@Paramater注解标注字段实现部分字段的自动赋值操作。不知大家有没有发现一个问题,笔者在上一章节中提及过,目标对象的字段名称无需与源对象字段名称保持一致。POJO之间字段名称真的不需要保持一致吗?答案是否定的。因为MiniBus实现自动赋值的前提就是相同的字段名称。别着急,笔者明白在实际开发过程中,POJO之间的字段名称可能由于业务的不同,不可能保持一致,但又需要实现自动赋值,那么该怎么办呢?其实开发人员可以使用@Paramater的value属性进行字段名称的二次定义。
使用@Paramater的value属性:
@Paramater("id") private int infoId;
这是又有开发人员会问,有没有办法可以为目标对象的字段多定义几个名称备用,因为目标对象的字段可能还需要N个源对象的自动赋值,值得庆幸的是,MiniBus仍然支持。这便是使用@Paramater的beanNames属性定义一组字段名称。
使用@Paramater的beanNames属性:
@Paramater(beanNames = { "id1", "id2", "id3" }) private int infoId;
beanNames属性允许传递的参数为字符序列,该序列中允许开发人员为目标对象字段定义一组字段名称,无论N个源对象的字段名称为何,我们只需要在目标对象中定义好对应的即可,这样既可以在不改变业务字段的前提下,又可以达到实现自动赋值的效果。
五、所有字段的自动赋值
上述程序示例,笔者演示了如何使用@Paramater注解标注字段实现部分字段的自动赋值操作。但如果需要被自动赋值的字段较多时,我们任然使用@Paramater注解的方式逐行标记,则太过于痛苦。所以当需要为目标对象的所有字段进行自动赋值是,便可以为目标对象标记@AutoParameters即可。
使用@AutoParameters实现自动赋值:
@Assignment @AutoParameters public class UserInfoBean2 { private int id; private String name; /* 此处省略set和get方法 */ }
当为目标对象标记@AutoParameters注解后,则意味着目标对象的所有字段都需要实现自动赋值。那么我们需要在使用@AutoParameters注解后就舍弃@Paramater注解吗?答案是否定的,因为@Paramater注解作用于目标对象字段,我们可以进行字段名称的二次定义,也就是说如果希望目标对象的所有字段都被自动赋值,但POJO之间的字段名称又不一致的时候,则可以在不一致的字段上标记@Paramater进行字段名称的二次定义或者定义一组字段名。
使用@Paramater与@AutoParameters注解联用:
@Assignment @AutoParameters public class UserInfoBean2 { @Paramater("id2") private int id; private String name; /* 此处省略set和get方法 */ }
@AutoParameters可以失效吗?答案是肯定的,@AutoParameters注解的value属性缺省为true时则意味着目标对象的所有字段均可以自动赋值,如果为false时,则失效。
让@AutoParameters失效:
@AutoParameters(false)
七、MiniBus性能测试
MiniBus的是一个具备灵活高性能的Bean自动赋值组件,笔者在测试过程中,100个字段的自动赋值操作,且字段数据容量大约在100MB左右,其时间消耗周期仅为<=25MS,所以完全能够轻松胜任大数量的POJO之间的自动赋值操作。
相关推荐
轴类零件加工工艺设计.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
seaborn基本绘图人力资源数据集
移动机器人(sw三维)
自制html网页源代码查看器
3吨叉车的液压系统设计().zip
1_实验三 扰码、卷积编码及交织.ppt
北京交通大学软件学院自命题科目考试大纲.pdf
雅鲁藏布江流域 shp矢量数据 (范围+DEM).zip
基于RUST的数据结构代码示例,栈、队列、图等
NIFD:2024Q1房地产金融报告
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/146916652
【工业机器视觉定位软件Vision-Detect】基于C#的WPF与Halcon开发的工业机器视觉定位软件(整套源码),开箱即用 有用户登录,图片加载,模板创建,通讯工具,抓边抓圆,良率统计,LOG日志,异常管理,九点标定和流程加载保存等模块,功能不是很完善,适合初学者参考学习。 资源介绍请查阅:https://blog.csdn.net/m0_37302966/article/details/146912206 更多视觉框架资源:https://blog.csdn.net/m0_37302966/article/details/146583453
内容概要:本文档详细介绍了Java虚拟机(JVM)的相关知识点,涵盖Java内存模型、垃圾回收机制及算法、垃圾收集器、内存分配策略、虚拟机类加载机制和JVM调优等内容。首先阐述了Java代码的编译和运行过程,以及JVM的基本组成部分及其运行流程。接着深入探讨了JVM的各个运行时数据区,如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区等的作用和特点。随后,文档详细解析了垃圾回收机制,包括GC的概念、工作原理、优点和缺点,并介绍了几种常见的垃圾回收算法。此外,文档还讲解了JVM的分代收集策略,新生代和老年代的区别,以及不同垃圾收集器的工作方式。最后,文档介绍了类加载机制、JVM调优的方法和工具,以及常用的JVM调优参数。 适合人群:具备一定Java编程基础的研发人员,尤其是希望深入了解JVM内部机制、优化程序性能的技术人员。 使用场景及目标:①帮助开发人员理解Java代码的编译和执行过程;②掌握JVM内存管理机制,包括内存分配、垃圾回收等;③熟悉类加载机制,了解类加载器的工作原理;④学会使用JVM调优工具,掌握常用调优参数,提升应用程序性能。 其他说明:本文档内容详尽,适合用作面试准备材料和技术学习资料,有助于提高开发人员对JVM的理解和应用能力。
Android项目原生java语言课程设计,包含LW+ppt
戴德梁行&中国房地产协会:2021亚洲房地产投资信托基金研究报告
Android项目原生java语言课程设计,包含LW+ppt
Thinkphp6.0+vue个人虚拟物品发卡网站源码 支持码支付对接 扫码自动发货 源码一共包含两个部分thinkphp6.0后端文件,以及vue前端文件.zip
《基于YOLOv8的食品冷链运输车厢门未锁闭预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。