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核心技術學習筆記--反射Java筆記反射
- Java註解與反射學習筆記Java反射筆記
- 深入理解 Java 反射和動態代理Java反射
- 設計模式學習筆記(七)代理模式以及動態代理的實現設計模式筆記
- Java學習之反射篇Java反射
- Java筆記-反射Java筆記反射
- 動態規劃學習筆記動態規劃筆記
- 好程式設計師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代理(jdk靜態代理、動態代理和cglib動態代理)JavaJDKCGLib
- Java代理之靜態代理Java
- Java學習:反射Java反射
- Java學習_反射Java反射
- Python學習筆記6——動態型別Python筆記型別
- 不學無數——Java動態代理Java
- java基礎 -反射筆記Java反射筆記
- JAVA學習筆記Java筆記
- JDK動態代理筆記,學習框架必備知識,學習框架之前先學一下這個JDK筆記框架
- Java提高班(六)反射和動態代理(JDK Proxy和Cglib)Java反射JDKCGLib
- java動態代理Java
- 深入淺出MyBatis:反射和動態代理MyBatis反射
- 《JAVA學習指南》學習筆記Java筆記
- AI學習筆記——強化學習之動態規劃(Dynamic Programming)解決MDP(1)AI筆記強化學習動態規劃
- java 反射之操作靜態MethodJava反射
- java反射學習(一)Java反射