<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">java动态代理的实现:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
首先上一张代码结构图:
代码:
package com.test.interf;
public interface UserDao {
public int add(int x,int y);
}
package com.test.impli;
import com.test.interf.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public int add(int x, int y) {
int sum = x + y;
return sum;
}
}
package com.test.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import com.test.interf.UserDao;
public class UserProxy {
private UserDao target;
public UserProxy(UserDao target) {
super();
this.target = target;
}
public UserDao getUserProxy() {
UserDao proxy = null;
ClassLoader loader = target.getClass().getClassLoader();
Class[] interfaces = new Class[]{UserDao.class};
InvocationHandler h = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String methodName = method.getName();
System.out.println("start \\\\ methodName is:::::"+methodName + " args is::"+Arrays.toString(args));
Object result = null;
result = method.invoke(target, args);
System.out.println("end \\\\");
return result;
}
};
proxy = (UserDao) Proxy.newProxyInstance(loader, interfaces, h);
return proxy;
}
}
package com.test.test;
import com.test.impli.UserDaoImpl;
import com.test.interf.UserDao;
import com.test.proxy.UserProxy;
public class Main {
public static void main(String[] args) {
UserDao ud = new UserDaoImpl();
ud = new UserProxy(ud).getUserProxy();
ud.add(1, 2);
}
}
运行结果:
start \\ methodName is:::::add args is::[1, 2]
end \\