動態代理功能封裝
原文地址:https://www.jianshu.com/p/f3a7ce6b73c5
qq群:614530228
為了方便使用,不再重複使用相同的程式碼,所以對動態代理進行了封裝。不足之處,歡迎指正。
動態代理類封裝
- 第一種方式
/**
* 動態代理的工具類
*/
public class ProxyUtil {
/**
* 獲取動態代理的物件
*
* @param clz 實現介面的class物件
* @param e 實現介面的物件
* @param <T> 介面物件
* @param <E> 實現介面的物件
* @return
*/
public static <T, E> T newInstance(Class clz, E e) {
return (T) Proxy.newProxyInstance(clz.getClassLoader(), clz.getInterfaces(), new MyProxy<>(e));
}
/**
* 實現動態代理的物件
*
* @param <E> 實現介面的物件
*/
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";
}
}
呼叫方式
public class Test {
public static void main(String[] args) {
UserService us = ProxyUtil.newInstance(UserServiceImpl.class, new UserServiceImpl());
System.out.println(us.getUsername());
}
}
- 第二種方式
/**
* 動態代理的工具類
*/
public class ProxyUtil {
/**
* 獲取動態代理的物件
*
* @param clz 介面的class物件
* @param e 實現介面的物件
* @param <T> 介面物件
* @param <E> 實現介面的物件
* @return
*/
public static <T, E> T newInstance(Class<T> clz, E e) {
return (T) Proxy.newProxyInstance(clz.getClassLoader(), new Class<?>[]{clz}, new MyProxy(e));
}
/**
* 實現動態代理的物件
*
* @param <E> 實現介面的物件
*/
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 class Test {
public static void main(String[] args) {
UserService us = ProxyUtil.newInstance(UserService.class, new UserServiceImpl());
System.out.println(us.getUsername());
}
}
您的喜歡,是我堅持不懈的動力。
The end---
相關文章
- Vue 封裝動態元件Vue封裝元件
- Java代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- JS功能封裝JS封裝
- 代理模式詳解:靜態代理、JDK動態代理與Cglib動態代理模式JDKCGLib
- 靜態代理和動態代理
- JAVA 靜態代理 & 動態代理Java
- 代理模式 - 動態代理模式
- 爬蟲動態http代理ip有什麼功能爬蟲HTTP
- 動態代理
- 3.靜態代理&動態代理&CGlibCGLib
- AOP之靜態代理VS動態代理
- spring aop原理 JDK動態代理和CGLIB動態代理SpringJDKCGLib
- JDK動態代理JDK
- CGLib 動態代理CGLib
- spring動態代理Spring
- java動態代理Java
- Spring 動態代理Spring
- java動態代理動態在哪裡?Java
- Java中的靜態代理和動態代理Java
- 靜態代理、動態代理與Mybatis的理解MyBatis
- 輕鬆理解 Java 靜態代理/動態代理Java
- C++動態庫封裝C#庫,驗證動態庫環境C++封裝C#
- JDK動態代理和CGLib代理JDKCGLib
- JDK動態代理和 CGLIB 代理JDKCGLib
- js 動態新增class封裝(es6語法)JS封裝
- 深入理解靜態代理與JDK動態代理JDK
- 靜態代理和動態代理(jdk/cglib)詳解JDKCGLib
- Java基礎系列-靜態代理和動態代理Java
- 你必須會的 JDK 動態代理和 CGLIB 動態代理JDKCGLib
- 動態代理架構架構
- java動態代理(1)Java
- Java動態代理(AOP)Java
- Java 動態代理newProxyInstanceJava
- 動態代理-cglib分析CGLib
- JDK動態代理初探JDK
- 封裝狀態資訊碼封裝
- 讓我們打一場動態代理的官司–Java動態代理Java
- cglib動態代理和jdk動態代理的區別與應用CGLibJDK