日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java JDK動態代理(AOP)用法及實現原理詳解

瀏覽:64日期:2022-08-22 17:21:40

Java-JDK動態代理(AOP)使用及實現原理分析

第一章:代理的介紹

介紹:我們需要掌握的程度

動態代理(理解) 基于反射機制

掌握的程度:

1.什么是動態代理?

2.動態代理能夠做什么?

后面我們在用Spirng和Mybatis的時候,要理解怎么使用的.

1.什么是代理?

代理,在我們日常生活之中就有體現,代購,中介,換ip,商家等等.

比如有一家美國的大學,可以對全世界招生.留學中介(代理 )

留學中介(代理):幫助這家美國的學校招生,中介是學校的代理中介是代替學校完成招生功能代理特點

中介和代理他們要做的事情是一致的:招生中介是學校代理,學校是目標家長-------->中介(學校介紹,辦理入學手續)---------->美國學校中介是代理,收取費用 2.為什么要找中介

為什么要找中介?

1.中介是專業的,方便.

2.家長現在不能自己去找學校。家長沒有能力訪問學校.或者美國學校不接收個人來訪

買東西都是商家賣, 商家是某個商品的代理, 你個人買東西,肯定不會讓你接觸到廠家的.

第二章:靜態代理

Java JDK動態代理(AOP)用法及實現原理詳解

2.1 使用代理模式的作用 功能增強:在你原有的功能上,增加了額外的功能.新增加的功能,叫做功能增強控制訪問:代理類不讓你訪問目標,例如商家不讓用戶訪問廠家 2.2 實現代理的方式

1.靜態代理:

1)代理類是自己手工實現的,自己創建一個java類,表示代理類

2)同時你所要代理的目標

特點:1)實現簡單2)容易理解。

模擬一個用戶購買u盤的行為。

用戶是客戶端類

商家:代理,代理某個品牌的u盤。

廠家:目標類。

三者的關系:用戶(客戶端)-—-商家(代理)-—-廠家(目標)

商家和廠家都是賣u盤的,他們完成的功能是一致的,都是賣u盤。

實現步驟:

實現步驟

1.創建一個接口,定義賣u盤的方法,表示你的廠家和商家做的事情2.創建廠家類,實現1步驟的接口3.創建商家,就是代理,也需要實現1步驟中的接口4.創建客戶端類,調用商家的方法買一個u盤

2.3 具體實現

Java JDK動態代理(AOP)用法及實現原理詳解

實現步驟

package com.rango.service;public interface usbSell { /** * 定義一個方法 參數 amount:表示一次購買的數量,暫時不用 * 返回值表示一個u盤的價格 * @param amount * @return */ float sell(int amount);}

1.創建一個接口,定義賣u盤的方法,表示你的廠家和商家做的事情

2.創建廠家類,實現1步驟的接口

package com.rango.factory;import com.rango.service.usbSell;//目標類:金士頓廠家,不接受用戶的單獨購買public class UsbKingFactory implements usbSell { /** * 定義一個方法 參數 amount:表示一次購買的數量,暫時不用 * 返回值表示一個u盤的價格 * * @param amount * @return */ @Override//一個128G的U盤是85元.// 后期根據amount,可以實現不同的價格,例如10000個,單擊是80,50000個75 public float sell(int amount) { return 85.0f*amount; }}

3.創建商家,就是代理,也需要實現1步驟中的接口

package com.rango.business;import com.rango.factory.UsbKingFactory;import com.rango.service.usbSell;//淘寶是一個商家,代理金士頓U盤的銷售public class TaoBao implements usbSell {// 聲明 商家代理的廠家具體是誰 private UsbKingFactory factory =new UsbKingFactory(); @Override// 實現銷售U盤功能 public float sell(int amount) {// 向廠家發送訂單,告訴廠家,我買了U盤,廠家發貨// 發送給工廠,我需要的訂單,返回報價 float price = factory.sell(amount);// 商家需要加價也就是代理要增加價格 price = price + 25;//在目標類的方法調用后,你做的其他功能,都是增強的意思 System.out.println('淘寶再給你返回一個優惠券,或者紅包');// 增加的價格 return price; }}

4.創建客戶端類,調用商家的方法買一個u盤

import com.rango.business.TaoBao;public class shopMain { public static void main(String[] args){// 創建代理的商家淘寶對象 TaoBao taoBao = new TaoBao();// 我只向淘寶買一件產品,得到報價 float price = taoBao.sell(2); System.out.println('購買一件產品.淘寶的報價為: '+price); }}所以我們再次總結代理類完成的功能:

目標類中方法的調用功能增強

所屬我們只有一個代理商,我們實際上可以寫多個代理商,

2.4 靜態代理的優缺點

我們再次總結一下靜態代理的優缺點

優點:

實現簡單容易簡單

確定:當你的項目中,目標類的代理類很多的時候,有一下的缺點

當目標類增加了,代理類可能也需要成倍的增加當你的接口中功能在增加了,或者修改了,會影響眾多的實現類,廠家類,代理都需要修改,影響比較多.

所以我們繼續學習動態代理

第三章 動態代理

本章,我們所掌握的是

1)什么是動態代理?

使用jdk的反射機制,創建對象的能力,創建的是代理類的的對象.而不用我們創建類文件,不用寫java文件, 什么叫動態?在程序執行時,調用jdk提供的方法才能創建代理類的對象

Java JDK動態代理(AOP)用法及實現原理詳解

2)知道動態代理能做什么?

2.1 靜態代理和動態代理模式的對比

在靜態代理中目標很多的時候,可以使用動態代理,避免靜態代理的缺點

在靜態代理中目標類很多時候,可以使用動態代理,避免靜態代理的缺點。動態代理中目標類即使很多,

代理類數量可以很少,

當你修改了接口中的方法時,不會影響代理類。

動態代理:在程序執行過程中,使用jdk的反射機制,創建代理類對象,并動態的指定要代理目標類。換句話說:動態代理是一種創建java象的能力,讓你不用創建 TaoBao類就能創建代理類對象,除去了中間商

在java中,要想創建對象

創建類文件,java 文件編譯為class 使用構造方法,創建類的對象 2.1 動態代理的介紹

Java JDK動態代理(AOP)用法及實現原理詳解

動態代理是指代理類對象在程序運行時由JVM根據反射機制動態生成的。動態代理不需要定義代理類的,java源文件。動態代理其實就是jdk運行期間,動態創建class字節碼并加載到JVM。動態代理的實現方式常用的有兩種:使用JDK代理,與通過CGLlB動態代理。

動態代理的實現:

jdk動態代理(理解):使用java反射包中的類和接口實現動態代理的功能,反射包java.lang.reflect,里面有三類:InvocationHandler,Method,Proxy cglib動態代理(了解): cglib是第三方的工具庫,創建代理對象 cglib的原理是繼承,cglib通過繼承目標類,創建它的子類,在子類中重寫父類中同名的方法,實現功能的修改。因為cglib是繼承,重寫方法,所以要求目標類不能是fina1的,方法也不能是final的。cglib的要求目標類比較寬松,只要能繼承就可以了。cglib在很多的框架中使用,比如mybatis,spring框架中都有使用。

Java JDK動態代理(AOP)用法及實現原理詳解

package Test;import com.rango.Impl.HelloServiceImpl;import com.rango.service.HelloService;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class TestApp { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {// HelloService service = new HelloServiceImpl();// service.sayhello('張三');// 以上是常規方法執行sayhello// 下面我們使用反射機制進行創建sayhello方法,核心Method(類中的方法) HelloServiceImpl target = new HelloServiceImpl();// 獲取sayhello名稱對應的Method類對象// public Method getM ethod(String name, Class<?>... parameterTypes)// 加入,該方法的參數有多個該怎么辦?// parameterTypes參數是一個類對象數組,按聲明的順序標識方法的形式參數類型。 Method method = HelloService.class.getMethod('sayhello', String.class);// 通過Metho可以執行sayhello方法的調用 /* * public Object invoke(Object obj, Object... args) * 表示執行方法的調用 * 參數: * 1.Object,表示對象,要執行這個對象的方法 * 2.Object...args,方法執行時的參數值 * 返回值: * Object:方法執行后的返回值 * */ Object ret = method.invoke(target, '李四'); }}

2.2 回顧反射 Method類

Method類的結構圖

Class Method java.lang.Object java.lang.reflect.AccessibleObject java.lang.reflect.Executable java.lang.reflect.Method 2.2.1 class.getMethod

提出問題?

public Method getMethod(String name, Class<?>... parameterTypes)

加入,該方法的參數有多個該怎么辦?

parameterTypes參數是一個類對象數組,按聲明的順序標識方法的形式參數類型。

2.2.2 Method.invoke

public Object invoke(Object obj,Object... args)

* public Object invoke(Object obj, Object... args)* 表示執行方法的調用* 參數:* 1.Object,表示對象,要執行這個對象的方法* 2.Object...args,方法執行時的參數值* 返回值:* Object:方法執行后的返回值*

到此這篇關于Java JDK動態代理(AOP)用法及實現原理詳解的文章就介紹到這了,更多相關Java-AOP用法及實現原理分析內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品1区| 狠狠躁少妇一区二区三区| 国产精品国产三级国产在线观看| 日本精品一区二区三区在线观看视频| 午夜在线播放视频欧美| 欧洲激情综合| 尤物网精品视频| 日本大胆欧美人术艺术动态| 中文字幕日本一区二区| 日韩精品社区| 国产精久久久| 四虎国产精品免费观看| 欧美a级一区二区| 国产精品密蕾丝视频下载| 视频精品一区| 欧美日韩午夜电影网| 国产精成人品2018| 高清一区二区三区av| 亚洲自啪免费| 国产日韩欧美中文在线| 欧美激情另类| 五月天综合网站| 日韩精品中文字幕一区二区| 精品成av人一区二区三区| 成人在线网站| 蜜臀91精品一区二区三区| 日本h片久久| 国产精品乱战久久久| 91视频久久| 黄色欧美日韩| 日韩精品成人在线观看| 麻豆精品一区二区综合av| 日韩精品永久网址| 午夜亚洲精品| 国产精品v一区二区三区| 女生影院久久| 美女精品一区| 欧美激情麻豆| 99视频在线精品国自产拍免费观看| 日韩区欧美区| 手机在线电影一区| 老鸭窝毛片一区二区三区| 青青草国产精品亚洲专区无| 亚洲国产成人二区| 麻豆亚洲精品| bbw在线视频| 久久国产精品久久久久久电车| 国产精品久久久久久久久久齐齐 | 成人福利视频| 国产亚洲午夜| 国产高清日韩| 狠狠爱www人成狠狠爱综合网| 欧美日韩一视频区二区| 日韩精品水蜜桃| 免费的成人av| 成人午夜在线| 偷拍亚洲精品| 999国产精品视频| 欧美日本久久| 欧美精选一区二区三区| 国产精品久久久一区二区| 日韩午夜免费| 国产一区二区三区四区二区| 国产亚洲毛片在线| 国产一区二区三区四区| 亚洲一二av| 四虎影视精品| 免费视频一区二区三区在线观看| 野花国产精品入口| 精品丝袜久久| 天海翼亚洲一区二区三区| 日韩在线观看不卡| 国产精品任我爽爆在线播放| 亚洲免费高清| 日韩国产一区二区| **爰片久久毛片| 亚洲欧美激情诱惑| 黄色aa久久| 国产亚洲一区二区三区不卡| 国产精一区二区| 亚洲一区av| 亚洲一本视频| 久久久久久色| 亚洲性图久久| 国产精品欧美大片| 综合激情视频| 亚洲中午字幕| 亚洲一级高清| 色综合五月天| 里番精品3d一二三区| 日本综合视频| 老司机精品久久| 欧美福利在线| 国产精品亚洲一区二区三区在线观看| 青草av.久久免费一区| 精品在线99| a日韩av网址| 高清久久一区| 麻豆国产欧美一区二区三区 | 欧美成人久久| 欧洲精品一区二区三区| 国产中文字幕一区二区三区| 欧美激情亚洲| 麻豆精品在线| 国产精品一国产精品k频道56| 在线观看一区| 在线观看一区| 免费在线视频一区| 99pao成人国产永久免费视频| 日韩精品免费一区二区三区| 福利视频一区| 韩国一区二区三区视频| 久久精品三级| 久久影视三级福利片| 久久精品99国产精品日本| 日本免费在线视频不卡一不卡二| 久久一区国产| 成人午夜在线| 视频二区不卡| 久久影院一区| 国内精品99| 先锋亚洲精品| 伊人久久大香伊蕉在人线观看热v| 国产精品免费看| 亚洲欧美日韩国产一区| 亚洲免费播放| 亚洲精品乱码日韩| 青青草国产成人99久久| 国产欧美日韩精品一区二区三区| 日韩精品福利一区二区三区| 欧美亚洲三区| 美女久久99| 日韩精品网站| 丝袜美腿一区二区三区| 亚洲三级毛片| 国产精品亚洲综合久久| 美女尤物国产一区| av资源中文在线| 999久久久精品国产| 午夜视频精品| 免费观看在线综合色| 欧美一区影院| 国产一区二区亚洲| 精精国产xxxx视频在线野外| 香蕉精品久久| 亚洲欧美久久| 国产日韩在线观看视频| 精品国产成人| 亚洲调教视频在线观看| 综合色一区二区| 美女国产精品久久久| 蜜臀国产一区| 夜夜嗨一区二区| 久久国产三级精品| 国产精品专区免费| 视频在线观看一区| 国产精东传媒成人av电影| 97精品中文字幕| 国产韩日影视精品| 中文字幕乱码亚洲无线精品一区| 日韩国产91| 国产suv精品一区| 亚洲精品电影| 7777精品| 91精品国产91久久久久久黑人| 亚洲一区二区三区高清不卡| 日本h片久久| 日韩在线观看不卡| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产网站在线| 日韩视频一区二区三区在线播放免费观看| 亚洲精品高潮| 91青青国产在线观看精品| 日韩一区精品字幕| 久久精品国产99国产精品| 在线视频观看日韩| 亚洲精品自拍| 日韩成人亚洲| 亚洲精品视频一二三区| 日韩成人免费| 日本中文字幕不卡| 久久青草久久| 日韩va亚洲va欧美va久久| 神马日本精品| 国产精品一区二区中文字幕| 久久久夜夜夜| 国产精品大片| 亚洲免费在线| 91亚洲国产成人久久精品| 亚洲精品三级| 99精品美女| 国产欧美一区二区三区米奇| 欧美大黑bbbbbbbbb在线| 久久91视频| 亚洲精品日本| 狠狠爱成人网| 亚洲啊v在线| 日本亚洲最大的色成网站www | 美女精品一区二区| 一区二区三区四区日韩|