前言
笔者在前几篇博客中对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之间的自动赋值操作。
相关推荐
`django_proctor` 是一个专为Python和Django框架设计的库,其版本号为1.0.3rc1,表明这是该库的1.0.3预发布版的第一个候选版本。`py2.py3-none-any` 标识表示这个库兼容Python 2和Python 3两种解释器,它不依赖于...
PyMySQL-1.0.3rc1.tar.gz
标题中的“PyPI 官网下载 | tinyaes-1.0.3rc1-cp310-cp310-win_amd64.whl”指的是在Python的官方包索引(PyPI)上下载的一个名为`tinyaes`的软件包,版本为1.0.3rc1,适用于Python 3.10版本,并且是为64位Windows...
PyMySQL-1.0.3rc1-py3-none-any.whl
"valer.queue-1.0.3rc11.zip" 是这个库的压缩包文件,版本号为1.0.3rc11,表明这是该库的一个预发布版本,rc(Release Candidate)意味着它接近最终正式版,但可能还存在一些未解决的问题或待优化的地方。...
这个版本"1.0.3-rc1"是1.0.3版本的候选发布版本,意味着它在功能上已经相当成熟,但可能还存在一些未发现的问题,等待社区反馈和修复。下载解压后的"log4cplus-1.0.3-rc1"目录包含了源代码、文档、示例以及构建脚本...
综上所述,P4JORM 1.0.3版本的更新主要集中在增强数据操作的稳定性和灵活性上,尤其是在处理分页查询和空值情况时。这将极大地提高开发效率,降低维护成本,对于依赖P4JORM的项目来说是一次显著的提升。为了充分利用...
java混淆工具,eclipse插件。...eclipse插件安装方式,将压缩包org.apusic.jocky_1.0.3.rar解压后的文件夹及其所有内容拷贝到eclipse的plugins中。对java进行混淆时,只需要右击工程选择Jocky的子菜单
《Firefox火狐浏览器1.0.3-mac版本:历史、功能与安装指南》 Firefox,又称为火狐浏览器,是由Mozilla基金会开发的一款开源网络浏览器。这款浏览器在全球范围内享有盛誉,以其强大的安全性、定制性以及对Web标准的...
swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3...
这个版本发布于2015年,虽然现在已经有了更新的版本,但在当时,1.0.3是一个重要的里程碑,引入了许多优化和改进,以提高稳定性和性能。 HBase的核心特性包括: 1. **分布式存储**:HBase将数据分布在多台服务器上...
JAVA版jieba 1.0.3-SNAPSHOT最新版本jar包。。把它导入idea项目,添加到library和module就可以用啦,导入eclipse项目就更简单了不用我说了吧
这个“firtex-1.0.3_RC_bin-win32”是firtex的一个早期版本,特别为Windows操作系统打造,提供了一个图形用户界面(GUI),使得在Windows环境下安装和操作firtex变得更加方便,免去了用户自行编译源代码的复杂过程。...
神思SS628100型读卡服务安装包_V1.0.3有驱版本
1. EJB插件:XDoclet-EJB插件能够自动创建EJB组件的部署描述符(ejb-jar.xml)、实体Bean的Java源代码以及接口类。通过在Java源文件中添加适当的Javadoc注释,开发者可以指定Bean的行为、事务管理、安全性等特性,...
这个版本1.0.3是该组件集合的一个稳定版本,用户反馈良好,表明它在实际应用中表现出色。 在IT行业中,组件化开发已经成为一个重要的趋势。eXtremeComponents旨在为开发者提供一套丰富的UI组件和非UI功能模块,涵盖...
标题 "mybaitslog2020.1.1.0.3.zip" 提供的是一款 MyBatis 日志插件的更新版本,版本号为 2020.1.1.0.3。这款插件是针对 IntelliJ IDEA 开发环境设计的,用于在 IDE 中更方便地查看和调试 MyBatis 的 SQL 查询语句。...