您的位置:首页 > 编程语言 > Java开发

java动态代理的实现

2016-04-12 17:12 519 查看
<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 \\
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: