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

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

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

概述

代理模式是為一個對象提供一個替身,以控制對這個對象的訪問。即通過代理對象訪問目標對象.這樣做的好處是:可以在目標對象實現(xiàn)的基礎(chǔ)上,增強額外的功能操作,即擴展目標對象的功能。

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

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

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

應(yīng)用案例

① 代碼實現(xiàn)

具體要求

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

② UML類圖

在這里插入圖片描述

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

優(yōu)點:在不修改目標對象的功能前提下, 能通過代理對象對目標功能擴展

缺點:因為代理對象需要與目標對象實現(xiàn)一樣的接口,所以會有很多代理類

一旦接口增加方法,目標對象與代理對象都要維護

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

相關(guān)文章

  • SpringBoot集成RocketMQ發(fā)送事務(wù)消息的原理解析

    SpringBoot集成RocketMQ發(fā)送事務(wù)消息的原理解析

    RocketMQ 的事務(wù)消息提供類似 X/Open XA 的分布事務(wù)功能,通過事務(wù)消息能達到分布式事務(wù)的最終一致,這篇文章主要介紹了SpringBoot集成RocketMQ發(fā)送事務(wù)消息,需要的朋友可以參考下
    2022-06-06
  • java多線程Future和Callable類示例分享

    java多線程Future和Callable類示例分享

    JAVA多線程實現(xiàn)方式主要有三種:繼承Thread類、實現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒有返回值,只有最后一種是帶返回值的。今天我們就來研究下Future和Callable的實現(xiàn)方法
    2016-01-01
  • SpringBoot Filter修改返回內(nèi)容,解決請求卡死200的錯誤

    SpringBoot Filter修改返回內(nèi)容,解決請求卡死200的錯誤

    這篇文章主要介紹了SpringBoot Filter修改返回內(nèi)容,解決請求卡死200的錯誤問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java網(wǎng)絡(luò)編程基礎(chǔ)用法詳解

    Java網(wǎng)絡(luò)編程基礎(chǔ)用法詳解

    網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備(計算機)的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來,本文將帶大家詳細了解Java的網(wǎng)絡(luò)編程,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-05-05
  • Java實現(xiàn)多線程同步五種方法詳解

    Java實現(xiàn)多線程同步五種方法詳解

    這篇文章主要介紹了Java實現(xiàn)多線程同步五種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • swagger注解@ApiModelProperty失效情況的解決

    swagger注解@ApiModelProperty失效情況的解決

    這篇文章主要介紹了swagger注解@ApiModelProperty失效情況的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java?-jar參數(shù)詳解之掌握Java可執(zhí)行JAR文件的運行技巧

    Java?-jar參數(shù)詳解之掌握Java可執(zhí)行JAR文件的運行技巧

    做項目的時候我們肯定接觸過很多jar包,下面這篇文章主要給大家介紹了關(guān)于Java?-jar參數(shù)詳解之掌握Java可執(zhí)行JAR文件的運行技巧,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • spring boot 添加admin監(jiān)控的方法

    spring boot 添加admin監(jiān)控的方法

    這篇文章主要介紹了spring boot 添加admin監(jiān)控的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Mybatis 插入和刪除批處理操作

    Mybatis 插入和刪除批處理操作

    在操作數(shù)據(jù)庫時,經(jīng)常會碰到批量插入、批量刪除的情況,直接執(zhí)行SQL語句還好做一點,當使用Mybatis進行批量插入、批量刪除時會有一些問題。下面對使用Mybatis批量插入,批量刪除進行介紹
    2016-12-12
  • java對接支付寶支付接口簡單步驟記錄

    java對接支付寶支付接口簡單步驟記錄

    最近項目APP需要接入微信、支付寶支付功能,在分配開發(fā)任務(wù)時,聽說微信支付接口比支付寶支付接口要難實現(xiàn),這篇文章主要給大家介紹了關(guān)于java對接支付寶支付接口的簡單步驟,需要的朋友可以參考下
    2024-05-05

最新評論