111111111111

Class<?> cls = Class.forName("包名.类名");

Object o = cls.newInstance();

222222222222

//取得方法

Method method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Boolean.class);//这里的boolean也可以是其他类型比如:Integer看情况赋值

333333333333333

//执行方法
method.invoke(o,val); //val是一个值,就是上面set方法的值

444444444444444444444444

//取得该类的所有方法

Method[] ms = cls.getMethods();

//取得其中一个方法的返回值类型

String type = ms[0].getReturnType().getName();

返回值类型:

java.lang.Long
java.lang.String

java.util.Date

java.lang.Double

java.lang.Float

int

这里可以根据方法的名称找到对应的返回值,然后赋值给第二步的参数 这样就获得 第二步的方法

55555555555555555555555555555555

一个excel导入,使用反射列子(个人代码收藏)

前端代码

<script type="text/javascript">
$(function(){
//导入基础数据
$("#importData").click(function() {
var rq = $("#inpRq").val();
var url = __ctx+'/zjdlbb/zjdlbb/zjdlbb/importDialog.ht';
var conf=$.extend({},{dialogWidth:550 ,dialogHeight:200,help:0,status:0,scroll:0,center:1});
var winArgs="dialogWidth="+conf.dialogWidth+"px;dialogHeight="+conf.dialogHeight
+"px;help=" + conf.help +";status=" + conf.status +";scroll=" + conf.scroll +";center=" +conf.center;
url=url.getNewUrl();
/*KILLDIALOG*/
DialogUtil.open({
height:conf.dialogHeight,
width: conf.dialogWidth,
url: url,
isResize: true,
sucCall : function(rtn) {
$.ligerDialog.success("导入成功", "", function(){
window.location.reload();
window.opener.refreshThis();
});
}
});
});
});
</script>

<div class="group"><a class="link " id="importData" href="javascript:;">导入</a></div>

后台代码

@RequestMapping({ "importExcel" })
@Action(description = "导入Excel弹窗")
public void importExcel(MultipartHttpServletRequest request,
HttpServletResponse response) throws Exception {
String rq = request.getParameter("rq");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-M-d");
MultipartFile fileLoad = request.getFile("xmlFile");
ResultMessage resultMessage = null;
try {
String fileType = fileLoad.getOriginalFilename().substring(
fileLoad.getOriginalFilename().lastIndexOf(".") + 1,
fileLoad.getOriginalFilename().length());
Workbook wb = null;
if (fileType.equals("xls")) {
wb = new HSSFWorkbook(fileLoad.getInputStream());
} else if (fileType.equals("xlsx")) {
wb = new XSSFWorkbook(fileLoad.getInputStream());
} else {
throw new Exception("读取的不是excel文件");
}
Sheet sheet = wb.getSheetAt(0);
XSSFSheet s = null;
HSSFCell cell0 = null;
HSSFCell cell1 = null;
Map<String, String> map = new HashMap<String, String>();

//获得总列数
int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
int rowNum=sheet.getLastRowNum();//获得总行数

Class<?> cls = Class.forName("com.ytd.zjdlbb.model.zjdlbb.Zjdlbb");
Method[] ms = cls.getMethods();
List<Zjdlbb> list = new ArrayList<Zjdlbb>();
Map<String,String> keyMap = this.getKey();
//遍历每行数据,第一行0是标题
for (int i = 1; i <= rowNum; i++) {
Object o = cls.newInstance();
//遍历每一列
for (int j = 0; j < coloumNum; j++) {
//获取列标题
String title = sheet.getRow(0).getCell(j).getStringCellValue();
/* if(title.endsWith(")")){
title = title.substring(0,title.indexOf("("));
}*/
// log.info("title ============================="+title);
//获取列的值
String colVal = sheet.getRow(i).getCell(j).getStringCellValue();
//查找对应实体类属性
String key = keyMap.get(title);
// log.info("key ============================="+key);
if(StringUtil.isNotEmpty(key)){
//遍历类的所有方法名
for (int k = 0; k < ms.length; k++) {
//获取get方法
String tmp = "get"+StringUtil.makeFirstLetterUpperCase(key);
//excel标题与类属性相同的时候
if(tmp.equals(ms[k].getName())&&StringUtil.isNotEmpty(colVal)){
String setType = ms[k].getReturnType().getName();
// log.info("setType ============================="+setType);
Method method = null;
if("boolean".equals(setType)){
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Boolean.class);
method.invoke(o,colVal);
}else if("java.lang.String".equals(setType)){
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),String.class);
method.invoke(o,colVal);
}else if("java.lang.Long".equals(setType)){
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Long.class);
method.invoke(o,Long.parseLong(colVal));
}else if("int".equals(setType)){
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Integer.class);
method.invoke(o,Integer.parseInt(colVal));
}else if("java.util.Date".equals(setType)){
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Date.class);
method.invoke(o,sdfTime.parse(colVal));
}else if("java.lang.Double".equals(setType)){
// log.info("hhhhhhh ===========oooooooooooooooooooo=================="+setType);
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Double.class);
method.invoke(o,Double.parseDouble(colVal));
}else if("java.lang.Float".equals(setType)){
method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Float.class);
method.invoke(o,Float.parseFloat(colVal));
}
}
}
}
}
list.add((Zjdlbb)o);
}

for(Zjdlbb entity:list){
Long id=UniqueIdUtil.genId();
entity.setId(id);
zjdlbbService.add(entity);
}

String result = "导入数据成功";
if (result.contains("成功")) {
resultMessage = new ResultMessage(1, "导入成功!");
} else {
resultMessage = new ResultMessage(0, result);
}
writeResultMessage(response.getWriter(), resultMessage);
} catch (Exception ex) {
ex.printStackTrace();
String str = MessageUtil.getMessage();
ex.getLocalizedMessage();
if (StringUtil.isNotEmpty(str)) {
resultMessage = new ResultMessage(0, "导入失败请检查导入的Excel是否正确:"
+ str);
response.getWriter().print(resultMessage);
} else {
String message = ExceptionUtil.getExceptionMessage(ex);
resultMessage = new ResultMessage(0, "导入失败请检查导入的Excel是否正确");
response.getWriter().print(resultMessage);
}
}
}

有关java反射机制 小结的更多相关文章

  1. Java反射机制小结和实际操作

    一.什么是反射 1.编译和运行 在了解什么是Java反射机制前,先聊聊Java的编译和运行. 还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文 ...

  2. Java进阶(六)Java反射机制可恶问题NoSuchFieldException

    作为一种重要特性,Java反射机制在很多地方会用到.在此做一小结,供朋友们参考. 首先从一个问题开始着手. 可恶的问题又来了,NoSuchFieldException,如下图所示: 完全不知道这个qu ...

  3. 夯实Java基础(二十一)——Java反射机制

    1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...

  4. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  5. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  6. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  7. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  8. Java反射机制专题

    ·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...

  9. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

随机推荐

  1. ThinkingInJava 学习 之 0000003 控制执行流程

    1. if-else 2. 迭代 1. while 2. do-while 3. for 4. 逗号操作符 Java里唯一用到逗号操作符的地方就是for循环的控制表达式. 在控制表达式的初始化和步进控 ...

  2. 【中间件安全】Nginx 安全加固规范

    1. 适用情况 适用于使用Nginx进行部署的Web网站. 2. 技能要求 熟悉Nginx配置,能够Nginx进行部署,并能针对站点使用Nginx进行安全加固. 3. 前置条件 1. 根据站点开放端口 ...

  3. Markdown 标题

    用 Markdown 书写时,只需要在文本前面加上 # 即可创建标题,Markdown 支持六级标题,语法及效果如下 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五 ...

  4. [Java] Apache Ant 构建基础教程

    环境:Ubuntu 12.04, java 1.7.0, ant 1.8.2. 前言 Apache Ant 是一个软件自动化构建工具,构建过程包括编译.测试和部署等.它和 Make 工具相似,但由 J ...

  5. MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

    新建web project: 命名为SSH,做如下设置: 新建后的工程目录如下: 然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加. 首先添加struts2 ...

  6. 现在越来越喜欢用ajax传值了,这样能让网站的体验性很好,今天就总结了一下常用的

    这是不用循环的方法 就是传过来的是一位数组 //编辑党建分类 function gk_bj(id){ $.post("{:U('Luser/lei_edlt')}",{id:id} ...

  7. JQuery登录代码

    $(function () { $("#login").submit(function(event) { event.preventDefault(); if ($("# ...

  8. 【TOP100案例专访】当当网工程师林嘉琦谈双11大促经验及APM实践

    导读:第七届TOP100全球软件案例研究峰会将于11月30日-12月3日在北京国家会议中心举办,本届峰会以“释放AI生产力 让组织向智能化演进”为开幕式主题,旨在推动企业在趋势下拥抱AI.探索和思考A ...

  9. okvis代码解读

    okvis_timing模块 提供时间转换的功能函数 okvis_util模块 包含 assert_macros.hpp  该文件包含一些有用的断言宏. source_file_pos.hpp 该文件 ...

  10. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...