我写了一个简单的java动态代理模拟:里面有UserMgrImp实现UserMgr接口,TransctionHandler和TimeHandler实现Handler接口,有一个Proxy类用来生成动态的的代理对象。在测试方法里,我单独为UerMgrImp添加TransctionHandler或TimeHandler可以实现其功能,但是我想把TransctionHandler和TimeHandler同时添加上去,让两者同时实现,怎么弄??
TransctionHandler代码:package com.ts.proxy;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class TransctionHandler implements Handler {
private Object target;
public TransctionHandler(Object target) {
super();
this.target = target;
}
@Override
public void invoke(Object o, Method m) {
System.out.println("transction begain");
try {
m.invoke(target);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println("transction commit");
}
}
TimeHandler代码:
package com.ts.proxy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TimeHandler implements Handler {
private Object target;
public TimeHandler(Object target) {
super();
this.target = target;
}
@Override
public void invoke(Object o,Method m) {
long start = System.currentTimeMillis();
System.out.println("start time:" +start);
try {
m.invoke(user);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
};
long end = System.currentTimeMillis();
System.out.println("time:" +(end-start));
}
}
Proxy部分代码:
public static Object newProxy(Class insef,Handler h)throws Exception{
String rt = "\n\t";
String methodStr = "";
Method [] methods = insef.getMethods();
for(Method m : methods){
methodStr = 
"   @Override"+ rt +
"   public void " + m.getName()+"(){"+ rt +
"      try{"+ rt +
"       Method md = "+insef.getName()+".class.getMethod(\"" +m.getName()+"\");" + rt+
"        h.invoke(this,md);"+ rt+
"      }catch(Exception e){e.printStackTrace();}"+ rt + 
"   }";
}

String str = 
"package com.ts.proxy;"+ rt +
"import java.lang.reflect.Method;"+ rt+
"public class CarTimeProxy implements "+insef.getName() +"{"+ rt +
"   com.ts.proxy.Handler h;"+ rt +
"   public CarTimeProxy(Handler h){"+ rt +
"        super();"+ rt +
"        this.h = h;"+ rt +
"   }"+ rt +
methodStr + rt +
"}";
File f = new File("d:/src/com/ts/proxy/CarTimeProxy.java");
FileWriter fw = new FileWriter(f);
fw.write(str);
fw.flush();
fw.close();
//compiler
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
Iterable units = fileMgr.getJavaFileObjects(f);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileMgr, null, null, null, units);
task.call();
fileMgr.close();
//loader
URL[] urls = new URL[]{new URL("file:/d:src/")};
URLClassLoader ur = new URLClassLoader(urls); 
Class c = ur.loadClass("com.ts.proxy.CarTimeProxy");
Constructor cst = c.getConstructor(Handler.class);
Object o2 = cst.newInstance(h);
//System.out.println(o.getClass().getName());
return o2; }
}UserMgrImp代码:
package com.ts.proxy;
public class UserMgrImp implements UserMgr {
@Override
public void add() {
System.out.println("1:连接User表");
System.out.println("2:添加User对象");
}
}在Test里面我是这样写的:UserMgr u = new UserMgrImp();
                        Handler h = new TimeHandler(u);
                        Handler h2 = new TransctionHandler(h);
                        UserMgr user = (UserMgr)Proxy.newProxy(UserMgr.class,h2);
                        user.add();
这时运行会报: object is not an instance of declaring class.
求解决!!