最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

2. JDK 中生成代理對(duì)象的 API

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

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

3.1具體要求

  1. 定義一個(gè)接口:ITeacherDao
  2. 目標(biāo)對(duì)象 TeacherDAO 實(shí)現(xiàn)接口 ITeacherDAO
  3. JDK代理模式,實(shí)現(xiàn)動(dòng)態(tài)代理

3.2代碼實(shí)現(xiàn)

package com.atguigu.proxy.dynamic;
public class Client {
public static void main(String[] args) {
    
	//創(chuàng)建目標(biāo)對(duì)象
	ITeacherDao target = new TeacherDao();
    
	//給目標(biāo)對(duì)象,創(chuàng)建代理對(duì)象, 可以轉(zhuǎn)成 ITeacherDao
    ITeacherDao proxyInstance = (ITeacherDao)newProxyFactory(target).getProxyInstance();
    
	// proxyInstance=class com.sun.proxy.$Proxy0 內(nèi)存中動(dòng)態(tài)生成了代理對(duì)象
	System.out.println("proxyInstance=" + proxyInstance.getClass());
    
	//通過(guò)代理對(duì)象,調(diào)用目標(biāo)對(duì)象的方法
	//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 {
    
	//維護(hù)一個(gè)目標(biāo)對(duì)象 , Object
	private Object target;
    
	//構(gòu)造器 , 對(duì) target 進(jìn)行初始化
	public ProxyFactory(Object target) {
		this.target = target;
	}
    
//給目標(biāo)對(duì)象 生成一個(gè)代理對(duì)象
public Object getProxyInstance() {
//說(shuō)明
/*
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
//1. ClassLoader loader : 指定當(dāng)前目標(biāo)對(duì)象使用的類加載器, 獲取加載器的方法固定
//2. Class<?>[] interfaces: 目標(biāo)對(duì)象實(shí)現(xiàn)的接口類型,使用泛型方法確認(rèn)類型
//3. InvocationHandler h : 事情處理,執(zhí)行目標(biāo)對(duì)象的方法時(shí),會(huì)觸發(fā)事情處理器方法, 會(huì)把當(dāng)前執(zhí)行的目標(biāo)對(duì)象方法作為參數(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 代理開(kāi)始~~");
			//反射機(jī)制調(diào)用目標(biāo)對(duì)象的方法
			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的動(dòng)態(tài)代理模式之JDK代理詳解的文章就介紹到這了,更多相關(guān)JDK代理詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java執(zhí)行Linux命令簡(jiǎn)單代碼舉例

    Java執(zhí)行Linux命令簡(jiǎn)單代碼舉例

    這篇文章主要給大家介紹了關(guān)于Java執(zhí)行Linux命令的相關(guān)資料,在開(kāi)發(fā)的過(guò)程中要善于利用JAVA面向?qū)ο缶幊痰膬?yōu)勢(shì),與Linux/Unix命令或Shell腳本的優(yōu)勢(shì),并將二者相結(jié)合,需要的朋友可以參考下
    2023-12-12
  • Java中Executor和Executors的區(qū)別小結(jié)

    Java中Executor和Executors的區(qū)別小結(jié)

    在Java并發(fā)編程中,Executor是一個(gè)核心接口,提供了任務(wù)執(zhí)行的抽象方法,而Executors是一個(gè)工具類,提供了創(chuàng)建各種線程池的工廠方法,Executor關(guān)注任務(wù)的執(zhí)行,而Executors關(guān)注如何創(chuàng)建適合的執(zhí)行器,感興趣的可以了解一下
    2024-10-10
  • java通過(guò)HTTP接收json詳細(xì)實(shí)例代碼

    java通過(guò)HTTP接收json詳細(xì)實(shí)例代碼

    Java作為一門(mén)廣泛使用的編程語(yǔ)言,很多開(kāi)發(fā)人員會(huì)用它來(lái)進(jìn)行http請(qǐng)求,獲取json數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java通過(guò)HTTP接收json的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • java連接SQL Server數(shù)據(jù)庫(kù)的方法

    java連接SQL Server數(shù)據(jù)庫(kù)的方法

    這篇文章主要為大家詳細(xì)介紹了java連接SQL Server數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • IDEA打開(kāi)java項(xiàng)目后里面的java文件不能運(yùn)行解決辦法

    IDEA打開(kāi)java項(xiàng)目后里面的java文件不能運(yùn)行解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA打開(kāi)java項(xiàng)目后里面的java文件不能運(yùn)行的解決辦法,有時(shí)候想運(yùn)行別人的項(xiàng)目,但是別人的項(xiàng)目并非IDEA項(xiàng)目(甚至只有源碼),當(dāng)我們打開(kāi)項(xiàng)目時(shí)候,并不能運(yùn)行,需要的朋友可以參考下
    2023-10-10
  • SpringBoot+MySQL實(shí)現(xiàn)讀寫(xiě)分離的多種具體方案

    SpringBoot+MySQL實(shí)現(xiàn)讀寫(xiě)分離的多種具體方案

    在高并發(fā)和大數(shù)據(jù)量的場(chǎng)景下,數(shù)據(jù)庫(kù)成為了系統(tǒng)的瓶頸。為了提高數(shù)據(jù)庫(kù)的處理能力和性能,讀寫(xiě)分離成為了一種常用的解決方案,本文將介紹在Spring?Boot項(xiàng)目中實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)讀寫(xiě)分離的多種具體方案,需要的朋友可以參考下
    2023-06-06
  • 大數(shù)據(jù) java hive udf函數(shù)的示例代碼(手機(jī)號(hào)碼脫敏)

    大數(shù)據(jù) java hive udf函數(shù)的示例代碼(手機(jī)號(hào)碼脫敏)

    這篇文章主要介紹了大數(shù)據(jù) java hive udf函數(shù)(手機(jī)號(hào)碼脫敏),的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java設(shè)計(jì)模式之淺談適配器模式

    java設(shè)計(jì)模式之淺談適配器模式

    我們現(xiàn)實(shí)生活中的適配器不少.例如,我們使用存儲(chǔ)卡適配器連接存儲(chǔ)卡和一個(gè)計(jì)算機(jī),因?yàn)橛?jì)算機(jī)僅支持一種類型的存儲(chǔ)卡和我們的卡不與計(jì)算機(jī)兼容,適配器是兩種不相容的實(shí)體之間的轉(zhuǎn)換器,適配器模式是一種結(jié)構(gòu)模式.本文就帶大家了解一下java適配器模式,需要的朋友可以參考下
    2021-06-06
  • 詳解Mybatis 傳遞參數(shù)類型為L(zhǎng)ist的取值問(wèn)題

    詳解Mybatis 傳遞參數(shù)類型為L(zhǎng)ist的取值問(wèn)題

    這篇文章主要介紹了詳解Mybatis 傳遞參數(shù)類型為L(zhǎng)ist的取值問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java并發(fā)之嵌套管程鎖死詳解

    Java并發(fā)之嵌套管程鎖死詳解

    這篇文章主要介紹了Java并發(fā)之嵌套管程鎖死詳解,涉及嵌套管程鎖死的發(fā)生,實(shí)例等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論

绵竹市| 裕民县| 兴隆县| 固原市| 都兰县| 肥西县| 岳西县| 合肥市| 朔州市| 德化县| 大庆市| 准格尔旗| 九江县| 安仁县| 文登市| 资兴市| 安吉县| 正镶白旗| 新乐市| 临夏市| 岳普湖县| 花莲县| 贵州省| 台山市| 大安市| 元氏县| 龙里县| 蕉岭县| 乡宁县| 千阳县| 萍乡市| 通州区| 永兴县| 根河市| 夹江县| 鞍山市| 钦州市| 襄汾县| 南康市| 永善县| 涿鹿县|