前言
不知大家是否和笔者曾经有一样的揪心事,那便是在实际程序开发过程中,我们往往需要将一个POJO中的字段值赋值于另一个POJO中的字段。一般来说我们都是直接采用set的方式手动赋值,不过一旦字段多达几十个的时候,这就纯粹成了体力活,并且伴随着一定的风险。
我们其实需要一种更高效的方式来帮我们完成这些基数作业层,而只需关注具体的业务即可。或许有很多开发人员早已思考到这个问题,并编写有自己的组件,但这些组件往往都是伴随有局限性的,甚至强制要求多个POJO的字段名称必须保持一致。这些“不合理”的要求MiniBus都已经帮你解决了,且具有更好的复用性、延伸性。
一、下载MiniBus
大家可以从http://code.google.com/p/sapphire-cache/downloads/detail?name=minibus-1.0.0-BETA.jar&can=2&q=#makechanges站点下载MiniBus的最新构件版本。
目前MiniBus并没有实现开源,那是因为目前版本过低,或许在后续版本中,MiniBus将能够实现开源。
二、MiniBus的使用
MiniBus的使用极其简单,它可以适用于任何Java项目,且完全可以独立于web容器运行。大家只需要理解并掌握@Assignment、@Paramater、AnnotationContext的用法即可。
@Assignment注解用于标注需要被自动赋值的目标对象,只有标记了@Assignment的POJO才能够实现后续的自动赋值,也就是说@Assignment作用于类型级别。@Paramater则用于标记目标对象字段,也就是说@Paramater用于定义哪些字段需要被自动赋值。而AnnotationContext抽象类则作为赋值入口,并提供有setParam()方法来实现目标对象与源对象之间的自动赋值操作。
我们首先定义一个源对象Bean:
public class InfoBean {
public int infoId;
public String userName;
public String passWord;
public String email;
/* 此处省略set和get方法 */
}
接着定义一个目标对象Bean,并标记Minibus提供的@Assignment、@Paramater注解:
@Assignment
public class InfoBean2 {
@Paramater
public int infoId;
@Paramater
public String userName;
@Paramater
public String passWord;
@Paramater
public String email;
/* 此处省略set和get方法 */
}
使用AnnotationContext实现自动赋值:
public static void main(String[] args) {
// TODO Auto-generated method stub
InfoBean info1 = new InfoBean();
info1.setInfoId(1);
info1.setUserName("minibus");
info1.setEmail("test@gmail.com");
info1.setPassWord("123456");
InfoBean2 info2 = new InfoBean2();
/* 目标对象,源对象 */
AnnotationContext.setParam(info2, info1);
}
当然在实际开发过程中,或许POJO之间的字段名称不经相同,我们也不可能强制要求需要实现自动赋值的POJO
之间必须保持相同的字段名称,这个时候我们则可以使用@Paramater注解的缺省value属性或者setName属性进行字段
名称的二次定义。
@Assignment
public class InfoBean2 {
@Paramater("userId")
public int id;
@Paramater("userName")
public String name;
@Paramater("passWord")
public String pwd;
@Paramater("email")
public String e_mail;
/* 此处省略set和get方法 */
}