前面写过一篇文章,叫做动态调用JavaBean的set方法,讨论如何在java中动态的向JavaBean设置属性值,前提是调用JavaBean的类并不知道JavaBean中都有哪些属性,前面文章讨论的解决方法有一个问题,就是被调用的JavaBean中的属性必须是public的,这违背了面向对象语言的封装性,今天这个问题终于得到解决,完全抛弃前面所编写的代码,不过仍然是使用反射机制来实现的。
Java语言: 临时自用代码@代码发芽网
public Object setProperty(String ClassPath,HttpServletRequest req)
{
try{
Class ClassName=Class.forName(ClassPath);
Object ClassInstance=ClassName.newInstance();
Method[] MethToExe=ClassName.getDeclaredMethods();
for(int i=0;i<MethToExe.length;i++)
{
String MethName=MethToExe[i].getName();
if(MethName.substring(0, 3).equals("set"))
{
String Parameter=req.getParameter(MethName.substring(3));
if(Parameter==null||Parameter.trim().equals(""))
{
continue;
}else{
Object arglist[] = new Object[1];
arglist[0] = new String(Parameter);
MethToExe[i].invoke(ClassInstance, arglist);
}
}
}
return ClassInstance;
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
{
try{
Class ClassName=Class.forName(ClassPath);
Object ClassInstance=ClassName.newInstance();
Method[] MethToExe=ClassName.getDeclaredMethods();
for(int i=0;i<MethToExe.length;i++)
{
String MethName=MethToExe[i].getName();
if(MethName.substring(0, 3).equals("set"))
{
String Parameter=req.getParameter(MethName.substring(3));
if(Parameter==null||Parameter.trim().equals(""))
{
continue;
}else{
Object arglist[] = new Object[1];
arglist[0] = new String(Parameter);
MethToExe[i].invoke(ClassInstance, arglist);
}
}
}
return ClassInstance;
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
这里实现的是将前台request对象传递过来的数据封装到bean中,首先得到所有的方法,如果是set方法,那么就使用invoke方法调用这个函数,这种方法基本上可以满足系统的需求了。
哈哈,会的
吼吼,正在网上搜索invoke什么意思,结果搜到你了,哈哈……
@hope @hope, 看来你多读读我的博客能节省不少时间