小程序猿的工作偷懒之路(1)-Java反射在工作中的应用

一、场景

在日常的开发工作中,主要涉及到的是MIS产品的开发,从业务上来说,不同的领域可能会有不同的业务,但是从软件行为的角度来考虑,我认为实质上绝大多数的MIS系统大体功能都是相近的,无外乎生成数据,数据处理,数据呈现,数据持久化。关于这些我的描述可能有些泛,但都不是我这次要记录的重点。

进入公司以来,都在从事软件开发,由于开发工作的简单重复,我很快的将精力从“了解公司框架并使用公司框架进行软件开发”转移到了“如何从这单调枯燥的重复性开发中摆脱出来,提高工作效率”上来。在这里我先提一点自己的想法,就是对重复性的业务进行归纳总结,进行向上抽象,广泛使用模板方法可以有效的减少代码量,好这个话题以后再讨论,接下来我们生硬的转入今天的主题,Java反射。


二、定义

JAVA反射机制是在运行状态中,对于任意一个,都能够知道这个类的所有属性和方法;对于任意一个对象,

都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

——引自百度百科(Java反射机制


三、例子

写在前面由于这不是一个教学博客,只是我纯粹的工作记录博客,所以我只会将在我工作中涉及到的部分进行记录,其余发散思维和知识点的拓展,我就不献丑了。


首先背景是我在进行功能模块的开发时,有些业务会要求在信息采集完毕之后,不直接保存到正式的业务表,而是先将数据保存到业务事件表中进行缓存,同时提交到审核审批模块中,由于审核审批模块是公用的,所以在开发时,我们约定,所有的业务数据都需要使用统一的业务日志ID(以BS_ID说明),而当我们在java后台需要使用到这笔业务数据时,通过BS_ID可以直接定位到这笔数据。在之前我的写法都是:在使用时,直接使用具体的类,取值,进行操作,这当然没什么问题,只是当开发的功能模块数量开始增加时,这个细小的问题开始凸显出来了,即:我们将在数十个业务处理类中使用一段逻辑相同的代码,这在寻常的开发中完全没有问题,而当逻辑发生变更时,带来的维护工作量将是巨大的。

例子:正常的BS_ID使用场景

	public void businessHandler(BsEntity entity){
		String bsID = entity.getBSID();	//获取业务日志ID
		
		//以下为针对bsID的处理
	}

当我们为了提高工作效率,缩减冗余代码时,这种典型的“复制-粘贴-小修改”的代码,必然要被我们消灭掉。

方法很简单,思路就是:忽略掉不同业务实体类的差别,因为在进行开发之间已经约定了BSID是无论哪个业务实体类都会有的,所以我们大可不必去在意究竟是哪个类提供了业务日志ID

	public void commonHandler(Object obj){
		String bsID =null;	//业务日志ID
		
		Field[] fields = obj.getClass().getDeclaredFields();
		for(int i=0; i<fields.length; i++){
			if(fields[i].getName() == "bsID" && fields[i].getType().getName().
					equals(java.lang.String.class.getName())){
				fields[i].setAccessible(true);	//设置可访问性
				bsID = (String) fields[i].get(obj);
				
				//对bsID的处理
				
				return;
			}
		}
	}

四、总结

由于使用模板类,那么必须忽略类之间的差异而抽取公共部分的功能,面对这种使用公共数据进行数据处理的方法,使用java反射配合模板类可以有效的缩小代码的编写量,提高工作效率,同时,java的反射功能在工作上的应用也不止于此,由于我比较懒,就先说到这里好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值