- 浏览: 242751 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
g_man1990:
g_man1990 写道在同一个文件夹下,jar包是按顺序从上 ...
tomcat中class和jar的加载顺序 -
g_man1990:
在同一个文件夹下,jar包是按顺序从上到下依次加载,按什么顺序 ...
tomcat中class和jar的加载顺序 -
上凌九霄:
谢谢
tomcat中class和jar的加载顺序 -
waitgod:
好文,值得收藏!!
HotSpot是什么? -
xiaomogui:
sd6733531 写道楼主,我想问点问题》
1.mixed, ...
HotSpot是什么?
package com.gui.test.reflection; import java.lang.reflect.Method; import java.util.Hashtable; import java.util.regex.Pattern; /** * * @desc 通过反射来动态调用get 和 set 方法 * @date 2010-10-14 * @Version 1.0 */ public class SetMethodReflect { private Class cls; /** * 传过来的对象 */ private Object obj; /** * 存放get方法 */ private Hashtable<String, Method> getMethods = null; /** * 存放set方法 */ private Hashtable<String, Method> setMethods = null; /** * 定义构造方法 -- 一般来说是个pojo * * @param o 目标对象 */ public SetMethodReflect(Object o) { obj = o; initMethods(); } /** * * @desc 初始化 */ public void initMethods() { getMethods = new Hashtable<String, Method>(); setMethods = new Hashtable<String, Method>(); cls = obj.getClass(); Method[] methods = cls.getMethods(); // 定义正则表达式,从方法中过滤出getter / setter 函数. String gs = "get(\\w+)"; Pattern getM = Pattern.compile(gs); String ss = "set(\\w+)"; Pattern setM = Pattern.compile(ss); // 把方法中的"set" 或者 "get" 去掉 String rapl = "$1"; String param; for (int i = 0; i < methods.length; ++i) { Method m = methods[i]; String methodName = m.getName(); if (Pattern.matches(gs, methodName)) { param = getM.matcher(methodName).replaceAll(rapl).toLowerCase(); getMethods.put(param, m); } else if (Pattern.matches(ss, methodName)) { param = setM.matcher(methodName).replaceAll(rapl).toLowerCase(); setMethods.put(param, m); } else { // System.out.println(methodName + " 不是getter,setter方法!"); } } } /** * * @desc 调用set方法 */ public boolean setMethodValue(String property, boolean value) { Method m = setMethods.get(property.toLowerCase()); if (m != null) { try { // 调用目标类的setter函数 m.invoke(obj, value); return true; } catch (Exception ex) { System.out.println("invoke getter on " + property + " error: " + ex.toString()); return false; } } return false; } /** * * @desc 调用set方法 */ public boolean setMethodValue(String property, String value) { Method m = setMethods.get(property.toLowerCase()); if (m != null) { try { /** * 调用obj类的setter函数 */ m.invoke(obj, value); return true; } catch (Exception ex) { System.out.println("invoke getter on " + property + " error: " + ex.toString()); return false; } } return false; } // 测试方法 public static void main(String args[]) { Test ah = new Test(); SetMethodReflect smr = new SetMethodReflect(ah); smr.setMethodValue("a", false); smr.setMethodValue("b", true); smr.setMethodValue("c", true); System.out.println(ah.isA()); System.out.println(ah.isB()); System.out.println(ah.isC()); } } // 一个model class Test { boolean a; boolean b; boolean c; public boolean isA() { return a; } public void setA(boolean a) { this.a = a; } public boolean isB() { return b; } public void setB(boolean b) { this.b = b; } public boolean isC() { return c; } public void setC(boolean c) { this.c = c; } }
上面的代码很早以前看过,忘记那个网站了。
应用场景是把一个属性存储到数据库中,当调用该字段的setter和getter方法时,可用此方法。
发表评论
-
java 重载和重写
2013-02-06 13:10 0Java 方法重载 (OverLoad)与方法覆盖(Over ... -
java-线程同步
2013-02-06 13:10 0原子性:哪些指令必须是不可分割的。在Java内存模型中,这些规 ... -
java序列化
2013-02-06 13:08 01, 比较常见的做法有两种:一是把对象包装成JSON字符串传 ... -
java动态内容绑定
2013-02-06 13:08 01, CDN 中动态内容是不 ... -
java-静态绑定
2013-02-06 13:07 0private、static、final修饰的方法是静态绑定的 ... -
java内存管理工具
2013-02-06 13:04 01.jps .:与unix上 ... -
ConcurrentHashMap
2013-02-06 13:01 01, HashTable容器在竞争激烈的并发环境下表现出效率 ... -
java队列
2013-01-21 17:25 01. 新的java.util.concurrent包可用的具 ... -
java反射和动态代理
2012-03-02 00:19 01. 运行时类型信息(Runtime Type Infomat ... -
java io和nio
2012-03-02 00:19 01 。关于字节流(OutputStream,InputStre ... -
java规范( The Java Language Specification, Third Edition)
2011-02-05 13:25 0http://java.sun.com/docs/boo ... -
IOException while loading persisted sessions: java.io.EOFException
2010-12-30 00:34 1832ERROR [main] session.ManagerBas ... -
java基础之字符串反转
2010-12-14 02:06 0public class Test { /** ... -
java源码之String
2010-12-07 23:15 20071.String源码中队String类的描述: ... -
java基础之变量
2010-12-07 22:39 10111. Class文件加载流程 ... -
java基础之内存分配
2010-11-16 00:25 11971. 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈 ... -
java基础之堆栈
2010-11-16 00:24 11921. JVM在它的生存周期中有一个明确的任务, ... -
Think in java4笔记 --- 容器之集合(Map)
2010-11-16 00:22 12064. Map接口 Map接口不是Collec ... -
Think in java4笔记 --- 容器之集合(Collection,List,Set)
2010-11-16 00:20 1197... -
Think in java4笔记 --- 容器之集合(历史)
2010-11-16 00:19 994当我们编写 ...
相关推荐
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/...
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...
Java反射通过Getter方法获取对象VO的属性值过程解析 Java反射是Java语言中一种强大的技术,可以在运行时动态地inspect和modify对象的行为。通过Java反射,可以获取对象的属性值,方法,构造函数等信息。在本文中,...
- 数据库操作框架:如Hibernate,通过反射调用getter/setter方法实现对象与数据库记录的映射。 - 插件系统:允许在不修改源代码的情况下扩展或替换已有功能。 - 测试工具:JUnit等测试框架利用反射访问私有方法...
1. **类型检查**:每次通过反射调用方法前都需要进行类型检查。 2. **安全检查**:反射会进行安全性检查,确保没有恶意行为。 3. **方法解析**:需要解析方法签名,确定具体的实现方法。 4. **动态绑定**:每次调用...
- 数据库持久化框架:例如Hibernate,通过反射调用对象的getter和setter方法来读写数据库记录。 - AOP(面向切面编程):动态代理实现切面的插入。 - 运行时检查类结构:例如在单元测试中验证类的属性和方法。 总结...
例如,在某个 Bean 中,我们可以使用内省机制来获取某个属性的 getter/setter 方法,然后使用反射机制来调用这些方法。 四、示例代码 下面是一个使用内省机制和反射机制的示例代码: ```java package MyTest; ...
例如,它利用反射加载和保存数据库实体,调用getter和setter方法来映射属性,以及执行HQL(Hibernate查询语言)中的动态方法调用。 总结来说,Java 1.5的反射机制极大地增强了Java的灵活性和动态性,使得开发者能够...
1. `setPropertyValue`: 这个方法接受对象、属性名和属性值,然后使用反射找到对应的setter方法并调用,从而设置对象的属性值。 2. `getPropertyValue`: 类似地,这个方法会找到getter方法,返回指定属性的值。 3. `...
注意,此方法仅适用于遵循JavaBean规范的对象,即每个属性都有对应的公共getter和setter方法。 #### 总结 Java的反射机制极大地增强了其灵活性和扩展性,尤其是在处理元数据、构建框架和插件系统时非常有用。然而...
对于每个字段,我们将其设为可访问,找到目标对象对应名称的字段,然后检查类型是否兼容,最后通过反射调用`set`方法进行赋值。 通过结合构造函数和反射,我们可以实现类属性的深度赋值,即使属性是私有的或需要...
`Student`类定义了学生的姓名属性以及相关的getter和setter方法。值得注意的是,`Study`方法用于模拟学生学习的行为,当通过反射调用时,会在控制台输出一条信息:“this person is a student”。 #### 五、配置...
在这个简单的`Admin`类中,我们定义了一个私有字符串字段`id`以及对应的getter和setter方法。`getId()`方法在打印`id`值之前会先输出这个值。 #### 使用反射调用方法 ```java public static void main(String[] ...
每个属性都有对应的getter和setter方法。这是Java中标准的bean模式,通常用于数据传输或持久化。 在实际应用中,我们可能会遇到这样的场景:用户可以自定义字段的显示顺序,这些顺序存储在数据库中。因此,我们需要...
5. **遵循框架规范**:对于Struts2等框架,遵守其特定规则,如不直接在Action方法中使用参数,而是通过类成员变量及相应的getter/setter方法进行操作。 6. **配置审查**:检查框架配置文件,如`struts.xml`,确保...
在标题和描述中提到的"java反射实例"是一个简单的入门程序,旨在演示如何使用反射来操作JavaBean的get和set方法。 首先,让我们理解JavaBean。JavaBean是一种符合特定规范的Java类,通常具有公有的getter和setter...
反射在JavaBean中扮演重要角色,允许工具通过属性的getter和setter方法动态地操作组件。例如,通过反射可以获取JavaBean的所有属性,然后动态地设置或获取这些属性的值。 6. 应用场景 反射机制在许多场景下都非常...