最近做毕业设计时遇到一个让我棘手的问题.我的设计是从前台传入我要操作的服务名和数据,在后台我可以把它们解析出类名和方法名,以及通过服务名从xml文件中提出sql语句.所以这个类名是动态的,所以我必须动态的实例化我要操作的类.我从网上找了一些这方面的资料后能实现这个动态类的实例化.我定义了一个操作的接口Service
public interface Service {
public List query();
public void add();
public void delete();
public void modify();
}
装载所有类名及classpath
public class ServiceConfig {
public static HashMap servicmap=new HashMap();
public static String getService(String servicename){
servicmap.put("User","bin.User");
servicmap.put("Person","bin.Person");
String serviceclass="";
serviceclass=ServiceConfig.servicmap.get(servicename).toString();
return serviceclass;
}
}
实例化动态类,并返回我查询的数据.
public class ServicExecuteHelper {
public static void execute(String servicename){
List list=null;
String serviceclass=ServiceConfig.getService(servicename);
System.out.println(serviceclass);
if(serviceclass!=null&&!serviceclass.equals("")){
try {
Class obj=Class.forName(serviceclass);
Service service=(Service)obj.newInstance();
list=service.query();
Iterator it=list.iterator();
while(it.hasNext()){
Person person=new Person();
person=(Person) it.next();
System.out.println(person.getId()+person.getName()+person.getAge()+person.getPassword()+person.getEmail());
}
} catch (Exception e) {
e.printStackTrace();
} }
}
}
蓝色部分就是出问题的部分,因为我的类是动态的,作为一个公共的实例化类,在此处应该动态的实例化Person类,并根据Person类里面的getXXX方法提取list对象里面的数据,可能是经验不足,在设计时没有找到更好的设计思想.希望各位大虾指点迷津,推荐点资料和书看看也可以.
public interface Service {
public List query();
public void add();
public void delete();
public void modify();
}
装载所有类名及classpath
public class ServiceConfig {
public static HashMap servicmap=new HashMap();
public static String getService(String servicename){
servicmap.put("User","bin.User");
servicmap.put("Person","bin.Person");
String serviceclass="";
serviceclass=ServiceConfig.servicmap.get(servicename).toString();
return serviceclass;
}
}
实例化动态类,并返回我查询的数据.
public class ServicExecuteHelper {
public static void execute(String servicename){
List list=null;
String serviceclass=ServiceConfig.getService(servicename);
System.out.println(serviceclass);
if(serviceclass!=null&&!serviceclass.equals("")){
try {
Class obj=Class.forName(serviceclass);
Service service=(Service)obj.newInstance();
list=service.query();
Iterator it=list.iterator();
while(it.hasNext()){
Person person=new Person();
person=(Person) it.next();
System.out.println(person.getId()+person.getName()+person.getAge()+person.getPassword()+person.getEmail());
}
} catch (Exception e) {
e.printStackTrace();
} }
}
}
蓝色部分就是出问题的部分,因为我的类是动态的,作为一个公共的实例化类,在此处应该动态的实例化Person类,并根据Person类里面的getXXX方法提取list对象里面的数据,可能是经验不足,在设计时没有找到更好的设计思想.希望各位大虾指点迷津,推荐点资料和书看看也可以.
String className = "xxxx";
Service obj = (Service) Class.forName(className).newInstance();
就是这样.
Class class=Class.forName("com.Person");
Field[] fileds = cla.getDeclaredFields();
for(int i=0;i<fileds.length;i++){
fileds[i].setAccessible(true);
System.out.println(fileds[i].get(obj));
}
用getXXX方法可以参考帖子http://topic.csdn.net/u/20090121/15/5839a568-7256-416e-a1a5-f4b0ddff764b.html