您的位置:首页 > 编程语言 > Java开发

利用java的反射原理实现数据注入功能

2009-12-09 21:42 841 查看
在j2ee的架构中,dao层把数据取出注入实体类,这样操作数据更具有面向对象的思想。下面我查了相关资料,写的一个简单的数据注入实体类的工具类。里面我直接用的List,效率可能不是很高,大家可以自己改成数组,这样效率会高很多。

package wsk.utils;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import org.apache.log4j.Logger;

/**
* <p>
* 完成数据注入实体类的功能
* </p>
*
* @author 懒人-小何
* @version 2009-12-6
*/
public final class ReflectionUtils {
private static final Logger logger = Logger.getLogger(ReflectionUtils .class);

/**
* <p>
* 注入数据
* </p>
*
* @param obj
* @param paramName
* @param value
*/
public final static void register(Object obj, String paramName, String value) {

Class<?> clazz = obj.getClass();
Method[] methods = clazz.getMethods();// 返回这个类里面方法的集合
char[] ch = paramName.toCharArray();
ch[0] = Character.toUpperCase(ch[0]);
String s = new String(ch);
String[] names = new String[] { ("set" + s).intern(),
("get" + s).intern(), ("is" + s).intern(),
("read" + s).intern() };
Method setter = null;
Method getter = null;
int length = methods.length;
for (int i = 0; i < length; ++i) {
Method method = methods[i];
/**
* 检查该方法是否为公共方法,如果非公共方法就继续
*/
if (!Modifier.isPublic(method.getModifiers()))
continue;
String methodName = method.getName();

for (String name : names) {
if (name.equals(methodName)) {
if (name.startsWith("set") || name.startsWith("read"))
setter = method;
else if (name.startsWith("get") || name.startsWith("is"))
getter = method;

}
}
}
Object[] param = buildParam(getter.getReturnType().getName(), value);
try {
setter.invoke(obj, param);
} catch (Exception e) {
e.printStackTrace();
logger.error("数据注入失败:" + e.getMessage());
}
}

/**
* <p>
* 构造注入数据的参数
* </p>
*
* @param paramType
* @param value
* @return Object[]
*/
private final static Object[] buildParam(String paramType, String value) {
Object[] param = new Object[1];
if (paramType.equalsIgnoreCase("java.lang.String")) {
param[0] = new String(value);
} else if (paramType.equalsIgnoreCase("int")
|| paramType.equalsIgnoreCase("Integer")) {
param[0] = new Integer(value);
} else if (paramType.equalsIgnoreCase("long")) {
param[0] = new Long(value);
} else if (paramType.equalsIgnoreCase("double")) {
param[0] = new Double(value);
} else if (paramType.equalsIgnoreCase("float")) {
param[0] = new Float(value);
} else if (paramType.equalsIgnoreCase("char")
|| paramType.equalsIgnoreCase("Character")) {
param[0] = Character.valueOf(value.charAt(0));
}
return param;
}

// public static void main(String[] args) throws InstantiationException,
// IllegalAccessException, IllegalArgumentException,
// InvocationTargetException {
// Object obj = Login.class.newInstance();
// ReflectionUtils.register(obj, "sex", "男");
//
// }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐