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

Java中靜態(tài)代理的使用與原理詳解

 更新時(shí)間:2023年09月20日 09:42:56   作者:流煙默  
這篇文章主要介紹了Java中靜態(tài)代理的使用與原理詳解,代理模式是為一個(gè)對(duì)象提供一個(gè)替身,以控制對(duì)這個(gè)對(duì)象的訪問(wèn),即通過(guò)代理對(duì)象訪問(wèn)目標(biāo)對(duì)象.這樣做的好處是:可以在目標(biāo)對(duì)象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對(duì)象的功能,需要的朋友可以參考下

概述

代理模式是為一個(gè)對(duì)象提供一個(gè)替身,以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。即通過(guò)代理對(duì)象訪問(wèn)目標(biāo)對(duì)象.這樣做的好處是:可以在目標(biāo)對(duì)象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對(duì)象的功能。

被代理的對(duì)象可以是遠(yuǎn)程對(duì)象、創(chuàng)建開銷大的對(duì)象或需要安全控制的對(duì)象

代理模式有不同的形式, 主要有三種靜態(tài)代理、動(dòng)態(tài)代理(JDK 代理、接口代理)和Cglib 代理(可以在內(nèi)存 動(dòng)態(tài)的創(chuàng)建對(duì)象,而不需要實(shí)現(xiàn)接口, 他是屬于動(dòng)態(tài)代理的范疇) 。

靜態(tài)代理在使用時(shí),需要定義接口或者父類,被代理對(duì)象(即目標(biāo)對(duì)象)與代理對(duì)象一起實(shí)現(xiàn)相同的接口或者是繼承相同父類。

應(yīng)用案例

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

具體要求

  • 定義一個(gè)接口:ITeacherDao
  • 目標(biāo)對(duì)象TeacherDAO 實(shí)現(xiàn)接口ITeacherDAO
  • 使用靜態(tài)代理方式,就需要在代理對(duì)象TeacherDAOProxy 中也實(shí)現(xiàn)ITeacherDAO
  • 調(diào)用的時(shí)候通過(guò)調(diào)用代理對(duì)象的方法來(lái)調(diào)用目標(biāo)對(duì)象.
  • 特別提醒:代理對(duì)象與目標(biāo)對(duì)象要實(shí)現(xiàn)相同的接口,然后通過(guò)調(diào)用相同的方法來(lái)調(diào)用目標(biāo)對(duì)象的方法
public interface ITeacherDao {
	void teach(); // 授課的方法
}
public class TeacherDao implements ITeacherDao {
	@Override
	public void teach() {
		System.out.println(" 老師授課中  。。。。。");
	}
}
//代理對(duì)象,靜態(tài)代理
public class TeacherDaoProxy implements ITeacherDao{
	private ITeacherDao target; // 目標(biāo)對(duì)象,通過(guò)接口來(lái)聚合
	//構(gòu)造器
	public TeacherDaoProxy(ITeacherDao target) {
		this.target = target;
	}
	@Override
	public void teach() {
		System.out.println("開始代理  完成某些操作。。。。。 ");//方法
		target.teach();
		System.out.println("提交。。。。。");//方法
	}
}
//測(cè)試客戶端
public class Client {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//創(chuàng)建目標(biāo)對(duì)象(被代理對(duì)象)
		TeacherDao teacherDao = new TeacherDao();
		//創(chuàng)建代理對(duì)象, 同時(shí)將被代理對(duì)象傳遞給代理對(duì)象
		TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
		//通過(guò)代理對(duì)象,調(diào)用到被代理對(duì)象的方法
		//即:執(zhí)行的是代理對(duì)象的方法,代理對(duì)象再去調(diào)用目標(biāo)對(duì)象的方法 
		teacherDaoProxy.teach();
	}
}

② UML類圖

在這里插入圖片描述

③ 靜態(tài)代理的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):在不修改目標(biāo)對(duì)象的功能前提下, 能通過(guò)代理對(duì)象對(duì)目標(biāo)功能擴(kuò)展

缺點(diǎn):因?yàn)榇韺?duì)象需要與目標(biāo)對(duì)象實(shí)現(xiàn)一樣的接口,所以會(huì)有很多代理類

一旦接口增加方法,目標(biāo)對(duì)象與代理對(duì)象都要維護(hù)

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

相關(guān)文章

  • 詳解mybatis foreach collection示例

    詳解mybatis foreach collection示例

    這篇文章主要介紹了詳解mybatis foreach collection的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • SpringBoot整合spring-data-jpa的方法

    SpringBoot整合spring-data-jpa的方法

    這篇文章主要介紹了SpringBoot整合spring-data-jpa的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • springboot-mysql-HikariCP集成過(guò)程

    springboot-mysql-HikariCP集成過(guò)程

    HiKariCP opens new window是數(shù)據(jù)庫(kù)連接池的一個(gè)后起之秀,號(hào)稱性能最好,可以完美地 PK 掉其他連接池,這篇文章主要介紹了springboot-mysql-HikariCP集成過(guò)程,需要的朋友可以參考下
    2023-07-07
  • Java之HashMap案例詳解

    Java之HashMap案例詳解

    這篇文章主要介紹了Java之HashMap案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java StringTokenizer分隔符拆分字符串

    Java StringTokenizer分隔符拆分字符串

    Java中的StringTokenizer類用于將一個(gè)字符串分解成標(biāo)記,本文主要介紹了Java StringTokenizer分隔符拆分字符串,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能

    Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法

    使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法

    本篇文章主要介紹了使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • springboot 日志實(shí)現(xiàn)過(guò)程

    springboot 日志實(shí)現(xiàn)過(guò)程

    Spring Boot 使用 SLF4J 作為日志門面,Logback 或 Log4j2 作為日志實(shí)現(xiàn),日志門面提供統(tǒng)一接口,簡(jiǎn)化日志記錄,實(shí)現(xiàn)負(fù)責(zé)具體功能,Spring Boot 默認(rèn)使用 SLF4J 和 Logback,可以通過(guò)配置文件或注解進(jìn)行日志記錄和控制,感興趣的朋友一起看看吧
    2025-01-01
  • 虛擬線程在Spring?Boot中的正確使用方式及最佳實(shí)踐

    虛擬線程在Spring?Boot中的正確使用方式及最佳實(shí)踐

    虛擬線程是Java19引入的一項(xiàng)新特性,它屬于Project Loom項(xiàng)目的一部分,與傳統(tǒng)的線程不同,虛擬線程并不是由操作系統(tǒng)直接管理,而是由Java虛擬機(jī)控制,這篇文章主要介紹了虛擬線程在Spring?Boot中的正確使用方式及最佳實(shí)踐的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • java生成圖片驗(yàn)證碼返回base64圖片信息方式

    java生成圖片驗(yàn)證碼返回base64圖片信息方式

    這篇文章主要介紹了java生成圖片驗(yàn)證碼返回base64圖片信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論

马鞍山市| 法库县| 鞍山市| 东丰县| 龙陵县| 黄梅县| 平江县| 宁化县| 霍邱县| 高安市| 固原市| 雅安市| 宁强县| 渭南市| 砀山县| 顺昌县| 沅陵县| 南充市| 噶尔县| 静宁县| 清水河县| 桦甸市| 淮南市| 房产| 玉环县| 丰宁| 进贤县| 太康县| 榆树市| 德保县| 石嘴山市| 柳州市| 鞍山市| 孟州市| 苏尼特右旗| 乌恰县| 宜阳县| 黑龙江省| 廊坊市| 雷波县| 深圳市|