采用反射处理多重if else
来源:互联网 发布:李小璐遭网络诈骗 编辑:程序博客网 时间:2024/06/11 04:35
最近在项目中添加一个批量导出Excel的功能,由于不同类型的企业服务类已经实现了单个导出Excel功能,如果把企业类型传进来,就能够得到每个企业的服务实现类名,只要调用下每个企业服务实现类的导出Excel功能就可以,刚开始想到如果一个类型一个类型的去判断,那不得累死,而且流式代码一大串,很不优雅,不是有类名了吗?这是想到了反射,通过类名加载类,然后调用下就可以了。
服务类接口定义片段:
/** * M model DTO * E entity 实体类 */public interface IBaseService<M extends Serializable, E extends Serializable> {/** * 导出Excel功能 * @param model * @return * @throws SystemException */public List<ExcelSheet> exportData(M model) throws SystemException;}
每个服务实现类均实现类IBaseService接口中的exportData方法,所有获取的bean可以统一转换成IBaseService,代码片段:
// 1.通过反射获取DTOString dtoClassName = "io.steveguoshao.rms.dto." + qylx + "DTO";Class<?> dtoClazz = Class.forName(dtoClassName);Method setQybhMethod = dtoClazz.getMethod("setQybh", String.class);Object dto = dtoClazz.newInstance();// 2.把企业编号值放入获取的DTO中setQybhMethod.invoke(dto, qybh);String serviceName = qylx.toLowerCase() + "Service";// 3.通过Spring获取服务类IBaseService<Serializable, ?> service = SpringContextUtils.getBean(serviceName);// 4.调用接口中的exportData方法List<ExcelSheet> list = service.exportData((Serializable) dto);
假如IBaseService接口中没有定义exportData方法,但是每个服务类中均有exportData方法,可以把上面的代码改成下面这样:
// 1.通过反射获取DTOString dtoClassName = "io.steveguoshao.rms.dto." + qylx + "DTO";Class<?> dtoClazz = Class.forName(dtoClassName);Method setQybhMethod = dtoClazz.getMethod("setQybh", String.class);Object dto = dtoClazz.newInstance();// 2.把企业编号值放入获取的DTO中setQybhMethod.invoke(dto, qybh);String serviceName = qylx.toLowerCase() + "Service";String methodName = "exportData方法";// 3.通过Spring获取服务类Object bean = SpringContextUtils.getBean(serviceName);// 4.获取exportData方法Method method = bean.getClass().getMethod(methodName, Serializable.class);// 5.通过反射调用类中的exportData方法dataList = (List<ExcelSheet>) method.invoke(bean, (Serializable) dto);
0 0
- 采用反射处理多重if else
- if else多重选择结构
- 嵌套if-else与多重~
- servlet用反射代替if..else
- 用反射和Dictionary替代if else
- if, else if, else
- if else if else
- if (){}else if(){} else{}
- 采用if...else结构解决分段函数--源码案例
- 如何通过反射来代替N多的if...else
- 如何通过反射来代替N多的if...else
- Java学习笔记(条件运算/运算符优先级/条件语句if/if..else/多重if/嵌套if)
- else if
- else if
- if-else
- if else
- if-else
- if else
- gas station
- QML属性绑定
- 几种TCP连接中出现RST的情况
- Find Peak Element
- CUGB14年校赛 C黄焖鸡与矩阵[粉色]
- 采用反射处理多重if else
- 【学习ios之路:C语言】字符串溢出情况分析.
- Cocoapods
- SCTF-RE200破解笔记
- smb
- 什么是JUKI多功能贴片机
- C++视频教程:C++实战水果忍者游戏
- JS操作JSON总结
- Servlet调用流程