利用java反射过滤类对象
2009-01-06 12:26
381 查看
package com.farrand.velocity.entity;
public class VelocityUser {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
package com.farrand.struts.action;
import java.lang.reflect.Method;
import org.apache.commons.lang.StringEscapeUtils;
import com.farrand.velocity.entity.VelocityUser;
public class Test {
private static String clzName;
/**
* 构造方法
* @param asClzName
* 要过滤的类名字
*/
public Test(String asClzName) {
Test.clzName = asClzName;
}
/**
* 用于取得被过滤后的类的方法
* @return 返回类型为Object
*/
public static Object getPropFilteredClz(Object classNameObj, Object[] obj) {
try {
Class clz = Class.forName(clzName);
Method[] methods = clz.getDeclaredMethods();
Object lsTemp = null;
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().startsWith("g")) {
// 反射调用get***方法
String methodSetName = methods[i].getName().replace("get", "set");
Method setMethod = clz.getMethod(methodSetName, methods[i].invoke(classNameObj, obj).getClass());
if (methods[i].invoke(classNameObj, obj) instanceof String) {
lsTemp = StringEscapeUtils.escapeHtml((methods[i].invoke(classNameObj, obj).toString()));
} else {
lsTemp = methods[i].invoke(classNameObj, obj);
}
setMethod.invoke(classNameObj, lsTemp);
}
}
} catch (Exception ex) {
// TODO
}
// 返回过滤后的类的实例
return classNameObj;
}
public static Object getPropFilteredClz(Object classNameObj) {
Object propFilteredObj = getPropFilteredClz(classNameObj, null);
return propFilteredObj;
}
public static void main(String[] args) {
// 此处为测试方法,比如传入的类型名为VelocityUser
VelocityUser userInfo = new VelocityUser();
userInfo.setId(5);
userInfo.setUsername("wan<br>mei");
userInfo.setPassword("shijie");
new Test("com.farrand.velocity.entity.VelocityUser");
// 此处过滤返回后,类型转换为VelocityUser型对象
VelocityUser mzk = (VelocityUser) Test.getPropFilteredClz(userInfo);
System.out.println("过滤后id:" + mzk.getId());
System.out.println("过滤后username:" + mzk.getUsername());
System.out.println("过滤后password:" + mzk.getPassword());
}
}
运行结果:
过滤后id:5
过滤后username:wan<br>mei
过滤后password:shijie
public class VelocityUser {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
package com.farrand.struts.action;
import java.lang.reflect.Method;
import org.apache.commons.lang.StringEscapeUtils;
import com.farrand.velocity.entity.VelocityUser;
public class Test {
private static String clzName;
/**
* 构造方法
* @param asClzName
* 要过滤的类名字
*/
public Test(String asClzName) {
Test.clzName = asClzName;
}
/**
* 用于取得被过滤后的类的方法
* @return 返回类型为Object
*/
public static Object getPropFilteredClz(Object classNameObj, Object[] obj) {
try {
Class clz = Class.forName(clzName);
Method[] methods = clz.getDeclaredMethods();
Object lsTemp = null;
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().startsWith("g")) {
// 反射调用get***方法
String methodSetName = methods[i].getName().replace("get", "set");
Method setMethod = clz.getMethod(methodSetName, methods[i].invoke(classNameObj, obj).getClass());
if (methods[i].invoke(classNameObj, obj) instanceof String) {
lsTemp = StringEscapeUtils.escapeHtml((methods[i].invoke(classNameObj, obj).toString()));
} else {
lsTemp = methods[i].invoke(classNameObj, obj);
}
setMethod.invoke(classNameObj, lsTemp);
}
}
} catch (Exception ex) {
// TODO
}
// 返回过滤后的类的实例
return classNameObj;
}
public static Object getPropFilteredClz(Object classNameObj) {
Object propFilteredObj = getPropFilteredClz(classNameObj, null);
return propFilteredObj;
}
public static void main(String[] args) {
// 此处为测试方法,比如传入的类型名为VelocityUser
VelocityUser userInfo = new VelocityUser();
userInfo.setId(5);
userInfo.setUsername("wan<br>mei");
userInfo.setPassword("shijie");
new Test("com.farrand.velocity.entity.VelocityUser");
// 此处过滤返回后,类型转换为VelocityUser型对象
VelocityUser mzk = (VelocityUser) Test.getPropFilteredClz(userInfo);
System.out.println("过滤后id:" + mzk.getId());
System.out.println("过滤后username:" + mzk.getUsername());
System.out.println("过滤后password:" + mzk.getPassword());
}
}
运行结果:
过滤后id:5
过滤后username:wan<br>mei
过滤后password:shijie
相关文章推荐
- Java中的反射机制 一个利用反射进行对象拷贝的例子
- JAVA利用反射映射JSON对象为JavaBean
- Java中利用反射原理拷贝对象
- Java -- 利用反射实现对象之间相同属性复制BeanUtil
- 利用反射java对象赋值,省略重复get,set赋值.
- Java反射(三)在运行时利用反射分析对象
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- java 利用反射实例化类对象
- java 利用反射 从数据库取出数据对象list 类似hibernate
- Java中的反射机制(二) 一个利用反射进行对象拷贝的例子
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
- JDBC_利用Java反射技术将查询结果封装为对象
- java开发中利用反射获取对象静态的方法
- Java反射学习(利用反射遍历链表并执行所有对象的所有get方法)
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- Java利用反射实现对象之间相同属性复制
- [Java]利用反射机制动态加载并创建包含参数的对象
- java 利用反射获取类对象中List的值