定义一个String,然后可以得到名称是这个String的类,方法或属性等有些类似Map<String,Class>就是效率低些
解决方案 »
- SSH想得到数据库某一项数据出现错误~~
- 这种效果是怎么做的?
- 64位的linux上单个进程可以使用的最大内存数量是多少
- 使用Axis开发Web Service, 客户端的遗留程序(C/C++程序)如何把数据传给服务器端的Web Service
- Mysql5.0中对字段设置索引后,再通过这两字段设置两表的关联关系时,出现问题,急得很!!!!,高手们来多帮忙帮忙哦!!!!!!!!!!!!!!!!!!!!!!!!!!
- 各位大哥哥!我想用weblogic服务器!应该下哪个版本啊
- openjms连接数据库的问题?(在线急等)
- 如何安装配置JBoss 4 ,还需要安装Tomcat么
- 为什么Home接口为什么只有一个create方法?
- 通过svn在客户端如何给服务器上的文件加密?如何通过svn在客户端彻底删除服务器上的文件?而且……
- 怎样在一个文件中检查哪个单词重复次数最多呢?高手指点!!谢谢!
- 就业问题
public class a{
public static void main(String[] args) {
try{
Constructor[] cs=Class.forName("b").getDeclaredConstructors();
//运行时获得包括类的所有构造函数的数组,即反射
int i=0;
System.out.println("类b的共有"+cs.length+"个够造函数");
while(i<cs.length){
System.out.println("类b的第"+(i+1)+"个够造函数:"+cs[i]);
i++;
}
}catch(ClassNotFoundException cn){ }
}
}
class b{
public b(){
//
}
public b(int x){
//
}
public b(int x,float y){
//
}
}
"b"就好像是他在镜子中的影子;
try{
Constructor[] cs=Class.forName("b").getDeclaredConstructors();
//运行时获得包括类的所有构造函数的数组,即反射
int i=0;
System.out.println("类b的共有"+cs.length+"个够造函数");
while(i <cs.length){
System.out.println("类b的第"+(i+1)+"个够造函数:"+cs[i]);
i++;
}
}catch(ClassNotFoundException cn){ }
上面这段代码,就是利用b在镜子中"反射"出来的影子得到他的相关属性,如构造函数;
SAXReader saxReader = new SAXReader();
String username = null;
String objectName; // 对象名 BblxDAOHibernate DAO前的数据 也就是Bblx
String methodName; // 应该调的方法名
Map<String, String> poMap = null; // 调方法该传的参数 Map<String, String> userMap = null;
try {
// 得到对document对象
Document document = saxReader.read(new File(filepath)); Element root = document.getRootElement(); // 得到类名
Element objecte = root.element("CallInfo").element("Params")
.element("Object");
objectName = objecte.getText(); // 得到方法名
Element method = root.element("CallInfo").element("Params")
.element("Method");
methodName = method.getText(); // 得到params元素 用于循环得到参数
Element params = root.element("CallInfo").element("Params")
.element("Po").element("paramstack").element("params");
int tempi = 0; // 用于计数
Class[] argsClass = null; // 调方法的参数class
Object[] argsObject = null; // 调方法的参数
for (Iterator i = params.elementIterator(); i.hasNext();) {
Element tempe = (Element) i.next();
poMap.put(tempe.getName(), tempe.attributeValue("value"));
Object ob = tempe.attributeValue("value");
argsClass[tempi] = ob.getClass();
argsObject[tempi] = ob;
tempi++;
} // 得到user节点 用于循环出用户数据
Element user = root.element("CallInfo").element("Params").element(
"User");
for (Iterator i = user.elementIterator(); i.hasNext();) {
Element tempe = (Element) i.next();
userMap.put(tempe.getName(), tempe.attributeValue("value"));
} // ***********动态创建类,动态掉方法*************// Class obClass = null;
Object object = null;// 这个类的对象
Method[] meths = null;// 存储该类的所有方法
Object returnObject = null; // 用于返回值
String returnType = null; // 返回类型
String returnCode = "0"; // 调用情况 0:失败 1:成功
String realObject = packageName + objectName + DAOHibernateExt; // 要请求的类的全名
String daoObject = objectName + DAOExt; // 对象的dao 如BblxDAO // 包.类
try {
obClass = Class.forName(realObject);// 得到T的Class
object = obClass.newInstance();// 得到对象
} catch (Exception e) {
e.printStackTrace();
} try {
String realReturnS = null;
List realReturnL = null;
obClass = Class.forName(daoObject); // 得到T的Class
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(lsc); // 通过这个对象才能得到别的dao对象
object = wac.getBean(daoObject);// 得到对象
// 直接调用方法 不必要通过循环
returnObject = object.getClass().getMethod(methodName,
(Class[]) argsClass).invoke(obClass, argsObject);
returnType = object.getClass().getMethod(methodName,
(Class[]) argsClass).getReturnType().toString();
if (returnType.indexOf("String") != -1) {
realReturnS = returnObject.toString();
} else if (returnType.indexOf("List") != -1) {
realReturnL = (List) returnObject;
}
for (int i = 0; i < realReturnL.size(); i++) {
Object ob = realReturnL.get(i);// 取出返回数据的一条
// obClass = Class.forName(realObject);// 得到T的Class
// object = obClass.newInstance();// 得到对象
Class oc = ob.getClass();
oc.getDeclaredMethods();
oc.newInstance();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // ******************************************动态创建类,动态掉方法end } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return username; }
* <method>MethodName</method> <po>ArrName</po> <user>Data</user>
* </params> </callinfo> </xml_root>这个文件! 在动态创建类 调类中的方法!