java反射之動態代理學習筆記
動態代理概述:
代理:本來自己做的事情,請別人來做,被請的人就是代理物件;
舉例:春節回家買票讓人代理買
動態代理:在程式執行過程中產生的這個物件,而程式執行過程中產生物件其實就是我們剛才反射講解的內容,所以動態代理其實就是透過反射來生成一個代理。
在java 中java.lang.reflect包提供一個proxy類和一個invocationHandler介面,透過使用這個類和介面就可以生成動態代理物件,JDk提供代理只能針對介面做代理,我們有更強大的代理cglib、proxy類中的方法建立動態代理物件。
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler h)
測試方法一
/** * @param args */ public static void main(String[] args) { /*UserImp ui = new UserImp(); ui.add(); ui.delete(); System.out.println("-------------------------------");*/ /* * public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces, * InvocationHandler h) */ /*MyInvocationHandler m = new MyInvocationHandler(ui); User u = (User)Proxy.newProxyInstance(ui.getClass().getClassLoader(), ui.getClass().getInterfaces(), m); u.add(); u.delete();*/ StudentImp si = new StudentImp(); si.login(); si.submit(); System.out.println("-------------------------------"); MyInvocationHandler m = new MyInvocationHandler(si); Student s = (Student)Proxy.newProxyInstance(si.getClass().getClassLoader(), si.getClass().getInterfaces(), m); s.login(); s.submit(); }
方法二
public interface User { public void add(); public void delete();}
方法三
public class UserImp implements User { @Override public void add() { //System.out.println("許可權校驗"); System.out.println("新增功能"); //System.out.println("日誌記錄"); } @Override public void delete() { //System.out.println("許可權校驗"); System.out.println("刪除功能"); //System.out.println("日誌記錄"); }}
方法四
public class StudentImp implements Student { @Override public void login() { System.out.println("登入"); } @Override public void submit() { System.out.println("提交"); }}
方法五
public interface Student { public void login(); public void submit();}
方法六
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyInvocationHandler implements InvocationHandler { private Object target; public MyInvocationHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("許可權校驗"); method.invoke(target, args); //執行被代理target物件的方法 System.out.println("日誌記錄"); return null; }}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2817708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java學習筆記--反射Java筆記反射
- java 反射和動態代理Java反射
- PHP 反射之動態代理PHP反射
- Java學習筆記系列-反射Java筆記反射
- JAVA學習篇--靜態代理VS動態代理Java
- Java動態代理和反射機制Java反射
- 【譯】11. Java反射——動態代理Java反射
- JAVA核心技術學習筆記--反射Java筆記反射
- Java註解與反射學習筆記Java反射筆記
- 深入理解 Java 反射和動態代理Java反射
- 【JAVA】代理模式之Java動態代理Java模式
- Go 反射 學習筆記Go反射筆記
- Java設計模式學習06——靜態代理與動態代理Java設計模式
- 設計模式學習筆記(七)代理模式以及動態代理的實現設計模式筆記
- Java學習之反射篇Java反射
- Java Web之動態代理JavaWeb
- Java學習筆記之staticJava筆記
- 動態規劃學習筆記動態規劃筆記
- 註解和反射學習筆記反射筆記
- Java筆記-反射Java筆記反射
- Java學習筆記之I/OJava筆記
- Java學習筆記之檔案Java筆記
- Java學習筆記之陣列Java筆記陣列
- Java學習筆記之繼承Java筆記繼承
- Java進階之 JDK動態代理與Cglib動態代理JavaJDKCGLib
- Mybatis學習筆記(6)-動態SQLMyBatis筆記SQL
- 好程式設計師Java學習路線之Spring框架之動態代理程式設計師JavaSpring框架
- Java設計模式-之代理模式(動態代理)Java設計模式
- 代理者模式——學習筆記模式筆記
- Java學習筆記之----------Java基本知識Java筆記
- JAVA基礎學習篇之反射Java反射
- JAVA 靜態代理 & 動態代理Java
- 帶你學 Java 技術之動態代理機制Java
- Java筆記-Java反射(二)Java筆記反射
- 【Java 反射學習】Java 反射基礎Java反射
- [Java 反射學習] Java 反射基礎Java反射
- 死磕java底層(三)—反射、動態代理和註解Java反射
- 【學習筆記】之:Java命名規範筆記Java