力所能及之Java反射机制(模拟EL表达式)
来源:互联网 发布:java公司官网模板源码 编辑:程序博客网 时间:2024/04/29 02:52
小狼最近看的hibernate啊,struts啊,spring啊,都是用反射的机制写的,所以呢,小狼决定今天也来看看反射,究竟是个什么样的东西
有这样一道题
编写一个程序,可以接受一个类的全路径,创建这个类的实例,获取类中的所有属性,并且执行全部以test开头的无参数方法
毫无疑问,这就是一道反射
小狼现在就想模拟${user.username}这样一个EL表达式
首先要读出数据,就必须写入数据
private void setterMethod(Object obj, String name, Object[] args) {try {String methodName = "set" + name.substring(0, 1).toUpperCase()+ name.substring(1);Method[] methods = clazz.getMethods();for (Method method : methods) {String methodNameGet = method.getName();if (methodName.equals(methodNameGet)) {Class<?>[] claxxes = method.getParameterTypes();String claxxName = null;for (Class claxx : claxxes) {claxxName = claxx.getName(); StaticUtil.lists.add(claxxName);} for (int i = 0; i < StaticUtil.lists.size(); i++) {Object list=StaticUtil.lists.get(i); for (Object arg : args) {String argName = arg.getClass().getName();if(list.equals(argName)){method.invoke(obj, args);}else{System.out.println("请用下列类型:"+list);break;}}}}}} catch (Exception e) {// TODO Auto-generated catch blockLog.getLog().info("运行失败");e.printStackTrace();}}大家都是set方法的格式一般都是setUsername();这样的,所以我们先得到set方法名称并用之与该类的所有方法名对比,获得该方法的参数,校验参数类型,传入值,set方法就ok了
接下来get方法,小狼就不多说了
private Object getterMethod(Object obj,String name){Class clazz=obj.getClass();Object returnValue=null;String getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//setUserNameMethod[] methods=clazz.getDeclaredMethods();for(Method method : methods){if(getMethodName.equals(method.getName())){try {returnValue=method.invoke(obj, null);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return returnValue;}
还有,对于反射调用private修饰的方法,必须写上method.setaccessible(true);
怎么样,反射是不是很强大很强大。。。快来给小狼点赞吧
0 0
- 力所能及之Java反射机制(模拟EL表达式)
- JAVA反射机制-EL表达式获取对象属性的原理
- 反射机制实现EL表达式的解析过程
- Java - 反射机制 - 正则表达式
- java自学之路-----反射机制 正则表达式
- Java 之反射机制
- java之反射机制
- java之反射机制
- java之反射机制
- Java之:反射机制
- Java之反射机制
- Java之反射机制
- java之反射机制
- Java之反射机制
- java之反射机制
- Java之反射机制
- Java之反射机制
- java之反射机制
- Sicily 1133. SPAM
- java 面试的体验
- hdu 3152Obstacle Course bfs+优先队列
- xcode快捷键
- Hdu 5192 Building Blocks Ⅱ
- 力所能及之Java反射机制(模拟EL表达式)
- 条款41、隐式接口和编译期多态
- vendor_passthru of ironic
- 下载Bootstrap及书籍
- Windows 10意义何在?
- 第六届蓝桥杯校内选拔:数独
- ubuntu 14.04 andorid4.4 编译环境以kernel编译环境搭建
- html5 本地图片预览
- Struts1---ActionForwad不仅可以到JSP还可以到另一个action