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

Bean自动赋值组件【MiniBus】推荐

阅读更多

前言

不知大家是否和笔者曾经有一样的揪心事,那便是在实际程序开发过程中,我们往往需要将一个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方法 */
}

 

 

 

5
1
分享到:
评论
3 楼 didiluck 2013-08-21  
我也想知道性能怎么样
2 楼 gao_xianglong 2013-06-14  
need_faith 写道
正好最近做项目中遇到bean赋值的问题,楼主能否给出和apache common包里的BeanUtils#copyProperteis的性能比较,因为我遇到的问题是,apache的这个工具方法性能很低,数据在一万条以上,bean字段在50个左右,做个性能比较,看看怎么样


apache common包里的BeanUtils我没用过,但据了解copyProperteis方法是针对对象浅克隆,也就是说返回的是源对象的一份拷贝,但此拷贝所针对的是同一类型。MiniBus纯粹是满足不同POJO之间字段的自动赋值。
1 楼 need_faith 2013-06-14  
正好最近做项目中遇到bean赋值的问题,楼主能否给出和apache common包里的BeanUtils#copyProperteis的性能比较,因为我遇到的问题是,apache的这个工具方法性能很低,数据在一万条以上,bean字段在50个左右,做个性能比较,看看怎么样

相关推荐

Global site tag (gtag.js) - Google Analytics