欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的動態(tài)代理模式之JDK代理詳解

 更新時間:2023年11月28日 08:44:06   作者:四葉草  
這篇文章主要介紹了Java的動態(tài)代理模式之JDK代理詳解,代理對象,不需要實現(xiàn)接口,但是目標對象要實現(xiàn)接口,否則不能用動態(tài)代理,JDK?實現(xiàn)代理只需要使用?newProxyInstance?方法,但是該方法需要接收三個參數(shù),需要的朋友可以參考下

1.動態(tài)代理模式的基本介紹

  1. 代理對象,不需要實現(xiàn)接口,但是目標對象要實現(xiàn)接口,否則不能用動態(tài)代理
  2. 代理對象的生成,是利用 JDK 的 API,動態(tài)的在內(nèi)存中構(gòu)建代理對象
  3. 動態(tài)代理也叫做:JDK 代理、接口代理

2. JDK 中生成代理對象的 API

  1. 代理類所在包:java.lang.reflect.Proxy
  2. JDK 實現(xiàn)代理只需要使用 newProxyInstance 方法,但是該方法需要接收三個參數(shù),完整的寫法是:static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )

3.動態(tài)代理應(yīng)用實例

3.1具體要求

  1. 定義一個接口:ITeacherDao
  2. 目標對象 TeacherDAO 實現(xiàn)接口 ITeacherDAO
  3. JDK代理模式,實現(xiàn)動態(tài)代理

3.2代碼實現(xiàn)

package com.atguigu.proxy.dynamic;
public class Client {
public static void main(String[] args) {
    
	//創(chuàng)建目標對象
	ITeacherDao target = new TeacherDao();
    
	//給目標對象,創(chuàng)建代理對象, 可以轉(zhuǎn)成 ITeacherDao
    ITeacherDao proxyInstance = (ITeacherDao)newProxyFactory(target).getProxyInstance();
    
	// proxyInstance=class com.sun.proxy.$Proxy0 內(nèi)存中動態(tài)生成了代理對象
	System.out.println("proxyInstance=" + proxyInstance.getClass());
    
	//通過代理對象,調(diào)用目標對象的方法
	//proxyInstance.teach();
	proxyInstance.sayHello(" tom ");
	}
}
//接口
public interface ITeacherDao {
    
    void teach(); // 授課方法
    
	void sayHello(String name);
}

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyFactory {
    
	//維護一個目標對象 , Object
	private Object target;
    
	//構(gòu)造器 , 對 target 進行初始化
	public ProxyFactory(Object target) {
		this.target = target;
	}
    
//給目標對象 生成一個代理對象
public Object getProxyInstance() {
//說明
/*
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
//1. ClassLoader loader : 指定當前目標對象使用的類加載器, 獲取加載器的方法固定
//2. Class<?>[] interfaces: 目標對象實現(xiàn)的接口類型,使用泛型方法確認類型
//3. InvocationHandler h : 事情處理,執(zhí)行目標對象的方法時,會觸發(fā)事情處理器方法, 會把當前執(zhí)行的目標對象方法作為參數(shù)傳入
*/
    return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),
			new InvocationHandler() {
		@Override
		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
			System.out.println("JDK 代理開始~~");
			//反射機制調(diào)用目標對象的方法
			Object returnVal = method.invoke(target, args);
			System.out.println("JDK 代理提交");
			return returnVal;
			}
		});
	}
}
public class TeacherDao implements ITeacherDao {
	@Override
	public void teach() {
   	 System.out.println(" 老師授課中.... ");
	}
    
	@Override
	public void sayHello(String name) {
        
	System.out.println("hello " + name);
        
	}
}

到此這篇關(guān)于Java的動態(tài)代理模式之JDK代理詳解的文章就介紹到這了,更多相關(guān)JDK代理詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程中正則表達式的用法總結(jié)

    Java編程中正則表達式的用法總結(jié)

    這篇文章主要介紹了Java編程中正則表達式的用法總結(jié),正則表達式是一種強大的字符串處理工具,Java對正則表達式的支持還是很不錯的,我們先來整理一下正則表達式的一些基礎(chǔ)知識:
    2016-05-05
  • java實現(xiàn)驗證碼類生成中文驗證碼

    java實現(xiàn)驗證碼類生成中文驗證碼

    java實現(xiàn)的漢字輸入驗證碼,主要包含兩個類,一個是生成驗證碼,一個是判斷驗證碼輸入是否正確,實現(xiàn)原理非常簡單,將漢字和干擾線生成圖片并將漢字保存到session,前臺獲取每次生成驗證碼圖片并用文本框值和session值比較,功能就怎么簡單
    2014-01-01
  • mybatis中string和date的轉(zhuǎn)換方式

    mybatis中string和date的轉(zhuǎn)換方式

    這篇文章主要介紹了mybatis中string和date的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java設(shè)計模式之java中介者模式詳解

    Java設(shè)計模式之java中介者模式詳解

    這篇文章主要為大家詳細介紹了23種設(shè)計模式之java中介者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-09-09
  • Spring Cloud Hystrix線程池不足的解決方法

    Spring Cloud Hystrix線程池不足的解決方法

    這篇文章主要介紹了Spring Cloud Hystrix線程池不足的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法

    intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法

    這篇文章主要介紹了intellij idea創(chuàng)建第一個動態(tài)web項目的步驟方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Springboot全局異常捕獲及try catch區(qū)別解析

    Springboot全局異常捕獲及try catch區(qū)別解析

    這篇文章主要介紹了Springboot全局異常捕獲及try catch區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • java排序算法圖文詳解

    java排序算法圖文詳解

    這篇文章主要為大家詳細介紹了Java經(jīng)典排序算法之歸并排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望可以對你有所幫助
    2021-07-07
  • Java創(chuàng)建多線程的兩種方式對比

    Java創(chuàng)建多線程的兩種方式對比

    在Java中創(chuàng)建線程的方式有兩種,第一種是直接繼承Thead類,另一種是實現(xiàn)Runable接口。那么這兩種方式孰優(yōu)孰劣呢?這就是本文需要探討的內(nèi)容范疇了,看官們請仔細向下看
    2014-10-10
  • 使用SpringCache操作Redis緩存數(shù)據(jù)的示例代碼

    使用SpringCache操作Redis緩存數(shù)據(jù)的示例代碼

    SpringCache是一個框架,實現(xiàn)了基于注解的緩存功能,只需要簡單的加一個注解,就能實現(xiàn)緩存功能,本文給大家介紹了如何使用SpringCache操作Redis緩存數(shù)據(jù),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01

最新評論