原文地址:http://www.reibang.com/p/f3a7ce6b73c5
qq群:614530228
為了方便使用难衰,不再重復(fù)使用相同的代碼坏快,所以對(duì)動(dòng)態(tài)代理進(jìn)行了封裝。不足之處歹颓,歡迎指正菩颖。
動(dòng)態(tài)代理類封裝
- 第一種方式
/**
* 動(dòng)態(tài)代理的工具類
*/
public class ProxyUtil {
/**
* 獲取動(dòng)態(tài)代理的對(duì)象
*
* @param clz 實(shí)現(xiàn)接口的class對(duì)象
* @param e 實(shí)現(xiàn)接口的對(duì)象
* @param <T> 接口對(duì)象
* @param <E> 實(shí)現(xiàn)接口的對(duì)象
* @return
*/
public static <T, E> T newInstance(Class clz, E e) {
return (T) Proxy.newProxyInstance(clz.getClassLoader(), clz.getInterfaces(), new MyProxy<>(e));
}
/**
* 實(shí)現(xiàn)動(dòng)態(tài)代理的對(duì)象
*
* @param <E> 實(shí)現(xiàn)接口的對(duì)象
*/
static class MyProxy<E> implements InvocationHandler {
E e;
public MyProxy(E e) {
this.e = e;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(e, args);
}
}
}
public interface UserService {
String getUsername();
}
public class UserServiceImpl implements UserService {
@Override
public String getUsername() {
return "Venus";
}
}
調(diào)用方式
public class Test {
public static void main(String[] args) {
UserService us = ProxyUtil.newInstance(UserServiceImpl.class, new UserServiceImpl());
System.out.println(us.getUsername());
}
}
- 第二種方式
/**
* 動(dòng)態(tài)代理的工具類
*/
public class ProxyUtil {
/**
* 獲取動(dòng)態(tài)代理的對(duì)象
*
* @param clz 接口的class對(duì)象
* @param e 實(shí)現(xiàn)接口的對(duì)象
* @param <T> 接口對(duì)象
* @param <E> 實(shí)現(xiàn)接口的對(duì)象
* @return
*/
public static <T, E> T newInstance(Class<T> clz, E e) {
return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class<?>[]{clz}, new MyProxy(e));
}
/**
* 實(shí)現(xiàn)動(dòng)態(tài)代理的對(duì)象
*
* @param <E> 實(shí)現(xiàn)接口的對(duì)象
*/
static class MyProxy<E> implements InvocationHandler {
E e;
public MyProxy(E e) {
this.e = e;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(e, args);
}
}
}
調(diào)用方式
public class Test {
public static void main(String[] args) {
UserService us = ProxyUtil.newInstance(UserService.class, new UserServiceImpl());
System.out.println(us.getUsername());
}
}
您的喜歡,是我堅(jiān)持不懈的動(dòng)力晌缘。
The end---