`
gao_xianglong
  • 浏览: 467819 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MiniBus1.0.3RC1版本发布——简单灵活的Bean自动赋值组件

阅读更多

前言

笔者在前几篇博客中对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之间的自动赋值操作。

4
2
分享到:
评论

相关推荐

    Python库 | django_proctor-1.0.3rc1-py2.py3-none-any.whl

    `django_proctor` 是一个专为Python和Django框架设计的库,其版本号为1.0.3rc1,表明这是该库的1.0.3预发布版的第一个候选版本。`py2.py3-none-any` 标识表示这个库兼容Python 2和Python 3两种解释器,它不依赖于...

    PyMySQL-1.0.3rc1.tar.gz

    PyMySQL-1.0.3rc1.tar.gz

    PyPI 官网下载 | tinyaes-1.0.3rc1-cp310-cp310-win_amd64.whl

    标题中的“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

    PyMySQL-1.0.3rc1-py3-none-any.whl

    Python库 | valer.queue-1.0.3rc11.zip

    "valer.queue-1.0.3rc11.zip" 是这个库的压缩包文件,版本号为1.0.3rc11,表明这是该库的一个预发布版本,rc(Release Candidate)意味着它接近最终正式版,但可能还存在一些未解决的问题或待优化的地方。...

    log4cplus-1.0.3-rc1.tar

    这个版本"1.0.3-rc1"是1.0.3版本的候选发布版本,意味着它在功能上已经相当成熟,但可能还存在一些未发现的问题,等待社区反馈和修复。下载解压后的"log4cplus-1.0.3-rc1"目录包含了源代码、文档、示例以及构建脚本...

    p4jorm 1.0.3版本

    综上所述,P4JORM 1.0.3版本的更新主要集中在增强数据操作的稳定性和灵活性上,尤其是在处理分页查询和空值情况时。这将极大地提高开发效率,降低维护成本,对于依赖P4JORM的项目来说是一次显著的提升。为了充分利用...

    JOCKY-1.0.3——eclipseplugin

    java混淆工具,eclipse插件。...eclipse插件安装方式,将压缩包org.apusic.jocky_1.0.3.rar解压后的文件夹及其所有内容拷贝到eclipse的plugins中。对java进行混淆时,只需要右击工程选择Jocky的子菜单

    Firefox火狐浏览器官方1.0.3-mac版本dmg安装包

    《Firefox火狐浏览器1.0.3-mac版本:历史、功能与安装指南》 Firefox,又称为火狐浏览器,是由Mozilla基金会开发的一款开源网络浏览器。这款浏览器在全球范围内享有盛誉,以其强大的安全性、定制性以及对Web标准的...

    swing-layout-1.0.3

    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...

    hbase1.0.3_part1

    这个版本发布于2015年,虽然现在已经有了更新的版本,但在当时,1.0.3是一个重要的里程碑,引入了许多优化和改进,以提高稳定性和性能。 HBase的核心特性包括: 1. **分布式存储**:HBase将数据分布在多台服务器上...

    JAVA版jieba 1.0.3-SNAPSHOT最新版本jar包

    JAVA版jieba 1.0.3-SNAPSHOT最新版本jar包。。把它导入idea项目,添加到library和module就可以用啦,导入eclipse项目就更简单了不用我说了吧

    firtex-1.0.3_RC_bin-win32(Windows版本安装程序)

    这个“firtex-1.0.3_RC_bin-win32”是firtex的一个早期版本,特别为Windows操作系统打造,提供了一个图形用户界面(GUI),使得在Windows环境下安装和操作firtex变得更加方便,免去了用户自行编译源代码的复杂过程。...

    神思SS628100型读卡服务安装包-V1.0.3有驱版本

    神思SS628100型读卡服务安装包_V1.0.3有驱版本

    xdoclet-plugins-1.0.3下载附doc

    1. EJB插件:XDoclet-EJB插件能够自动创建EJB组件的部署描述符(ejb-jar.xml)、实体Bean的Java源代码以及接口类。通过在Java源文件中添加适当的Javadoc注释,开发者可以指定Bean的行为、事务管理、安全性等特性,...

    eXtremeComponents-1.0.3

    这个版本1.0.3是该组件集合的一个稳定版本,用户反馈良好,表明它在实际应用中表现出色。 在IT行业中,组件化开发已经成为一个重要的趋势。eXtremeComponents旨在为开发者提供一套丰富的UI组件和非UI功能模块,涵盖...

    mybaitslog2020.1.1.0.3.zip

    标题 "mybaitslog2020.1.1.0.3.zip" 提供的是一款 MyBatis 日志插件的更新版本,版本号为 2020.1.1.0.3。这款插件是针对 IntelliJ IDEA 开发环境设计的,用于在 IDE 中更方便地查看和调试 MyBatis 的 SQL 查询语句。...

Global site tag (gtag.js) - Google Analytics