1. 程式人生 > >Java動態代理的返回值

Java動態代理的返回值

在接觸到java動態代理的時候,開始不太明白InvocationHandler裡invoke方法返回值代表什麼,後來寫了個Demo驗證一下就明白了。

新建一個介面

public interface Person {
    String say(String word);
}

實現類

public class Student implements Person {
    @Override
    public String say(String word) {
        Log.d("msg",word);
        return "這是返回值";
    }
}

InvocationHandler實現類

public class MyInvocation implements InvocationHandler {
    private Object object;
    public MyInvocation(Object object){
        this.object = object;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Log.d("msg","invoke begin");
//        Log.d("msg",proxy.getClass().getName()+"--->"+object.getClass().getName());
       //return "自定義返回值";
        return method.invoke(object,args);
    }
}

呼叫

Student s = new Student();
        Person proxy = (Person) Proxy.newProxyInstance(getClassLoader(),new Class[]{Person.class},new MyInvocation(s));
        String b = proxy.say("i a student");
        Log.d("msg","b==" + b);

從控制檯可以看到打印出"b==這是返回值"

如果在invoke方法返回值改成 return "自定義返回值",則b==自定義返回值

由此可以得出invoke方法中返回的object應該對應代理類中方法的返回值。

相關推薦

Java動態代理返回

在接觸到java動態代理的時候,開始不太明白InvocationHandler裡invoke方法返回值代表什麼,後來寫了個Demo驗證一下就明白了。 新建一個介面 public interface Person { String say(String word);

利用Java 動態代理,自定義註解 讀取配置檔案中的屬性

Java動態代理在一些中介軟體中經常用到,或者一些大型專案中都會用到。 這裡順帶使用一下自定義註解方式,基於java 反射機制讀取.properties格式檔案。 demo的大致內容包含以下: 1.配置檔案:config.properties url=http://www.

java動態代理【一】

bject print reat 映射 tor ted borde 需要 static java動態代理的定義:為其他目標類的方法增加切面的邏輯,即在執行目標類方法的時候,先去執行一段如校驗檢測的邏輯代碼。java通俗一點就是生成一個繼承目標類的子類,並在每個調用方法都添加

Java——動態代理

插入 ref exc tcl try 反射 mil 動態 () 在靜態代理中,我們在調用target類的時候,都是先拿到proxy類。由於proxy類中將target類作為了成員變量,而且跟target類繼承了一樣的接口,具有同樣的

java-forkjoin帶有返回

over start join random ide eal 獲取 return group 來自並發編程網: http://ifeve.com/fork-join-3/ 如果這個任務必須解決一個超過預定義大小的問題,你應該將這個任務分解成更多的子任務,並且用Fork/Jo

Java動態代理

throws ice handle main throw int 表示 isp logs 首先我們定義一個接口 public interface SayService { public void say(); } View Code 接著實現這個接口 p

Java動態代理學習【Spring AOP基礎之一】

tor -1 我們 null exception 文件 cat static 一個   Spring AOP使用的其中一個底層技術就是Java的動態代理技術。Java的動態代理技術主要圍繞兩個類進行的    java.lang.reflect.InvocationHan

JAVA動態代理機制解析

定義 book lang 並不是 stat 控制 () highlight 什麽 1. 概述  首先,我們來思考如下兩個問題:  什麽是代理模式?為什麽要使用代理模式?   簡單總結一下,所謂的代理模式就是在原有的服務上多加一個占位,通過這個占位去控制服務的訪問。通過代理模

Java動態代理 深度詳解

實現 接下來 href 新建 結構 str 如果 cat 子類 代理模式是設計模式中非常重要的一種類型,而設計模式又是編程中非常重要的知識點,特別是在業務系統的重構中,更是有舉足輕重的地位。代理模式從類型上來說,可以分為靜態代理和動態代理兩種類型。 今天我將用非常簡單易懂的

Java動態代理之通俗理解

java動態代理代理模式介紹 代理模式是一種常用的設計模式,其作用就是為目標對象提供額外的訪問方式,在不修改目標對象的前提下,擴展目標對象的額外功能,比如統計執行時間,打印日誌等。 代理模式分為兩種:靜態代理和動態代理。 需求:假如不想改動原有代碼情況下,並記錄用戶保存方法的執行時間。示例代碼如下: 接口 p

java 動態代理

etc over 使用 obj HR urn 目標 import ssl 動態代理 //---------------TargetInterface package cn.ms.proxy; public interface TargetInterface {

5.java動態代理、反射

.net details span article get tar idea https tails 1.java動態代理、反射(IDEA導入JUnit4) 1.1.反射    5.java動態代理、反射

Java 動態代理是基於什麽原理(還沒整理完)

logs 判斷 java代碼 動態生成 voc https retrofit 哪些 AS 1> Java的反射機制在平時的業務開發過程中很少用到,但是在一些基礎框架的搭建上應用非常廣泛 2>什麽是Java反射機制 Java反射機制是在運行狀態中,對於任意一個類,

Java動態代理代碼快速上手

cfb inter main 兩個 eth print eno 沒有 create 動態代理的兩個核心的點是:代理的行為 和 代理機構。 舉個例子,上大學的時候,很多同學吃午飯的時候都是叫別人帶飯,有一個人H特別熱心腸,想了一個辦法,他在門口掛了個公示牌,每天有誰想要找

2018-07-24期 Java動態代理實現數據庫連接池

iter 異常 ... lse system com link 是我 driver package cn.sjq.proxy.ds.pool;import java.io.PrintWriter;import java.lang.reflect.InvocationHand

Java動態代理、XML、正則

類的方法 編寫 編碼 new 就是 返回 st2 spl 5.2.1 15.1 動態代理 在之後學習Spring框架時,Spring框架有一大核心思想,就是AOP,(Aspact-Oriented-Programming 面向切面編程) 而AOP的原理就是J

Java動態代理模式 -- 保護代理

dna 接口 private 意義 except handle loader param lac 意義 將接口的調用統一到一個函數裏處理,然後再去具體實例調用相應的方法,充當一個分發器的作用 user -> handler -> method 字典 動態:指的是

Java-動態代理

tid some case interface 創建 lan class row art JDK 1 import java.lang.reflect.InvocationHandler; 2 import java.lang.reflect.Method; 3

JAVA 動態代理原理和實現

ror binary lose ole jdk 動態代理 參數 try lob rac 在 Java 中動態代理和代理都很常見,幾乎是所有主流框架都用到過的知識。在面試中也是經常被提到的話題,於是便總結了本文。 Java動態代理的基本原理為:被代理對象需要實現某個接口(這是

java動態代理之CGLIB實現

ssl return 其他 ase ger pac 父類 linked nic 動態代理(CGlib 與連接池的案例) Cglib代理: 針對類來實現代理,對指定目標 產生一個子類 通過方法攔截技術攔截所有父類方法的調用。 我們要使用cglib代理必須引入 cglib的j