成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解

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

Java-JDK動(dòng)態(tài)代理(AOP)使用及實(shí)現(xiàn)原理分析

第一章:代理的介紹

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

動(dòng)態(tài)代理(理解) 基于反射機(jī)制

掌握的程度:

1.什么是動(dòng)態(tài)代理?

2.動(dòng)態(tài)代理能夠做什么?

后面我們?cè)谟肧pirng和Mybatis的時(shí)候,要理解怎么使用的.

1.什么是代理?

代理,在我們?nèi)粘I钪芯陀畜w現(xiàn),代購,中介,換ip,商家等等.

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

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

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

為什么要找中介?

1.中介是專業(yè)的,方便.

2.家長現(xiàn)在不能自己去找學(xué)校。家長沒有能力訪問學(xué)校.或者美國學(xué)校不接收個(gè)人來訪

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

第二章:靜態(tài)代理

Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解

2.1 使用代理模式的作用 功能增強(qiáng):在你原有的功能上,增加了額外的功能.新增加的功能,叫做功能增強(qiáng)控制訪問:代理類不讓你訪問目標(biāo),例如商家不讓用戶訪問廠家 2.2 實(shí)現(xiàn)代理的方式

1.靜態(tài)代理:

1)代理類是自己手工實(shí)現(xiàn)的,自己創(chuàng)建一個(gè)java類,表示代理類

2)同時(shí)你所要代理的目標(biāo)

特點(diǎn):1)實(shí)現(xiàn)簡(jiǎn)單2)容易理解。

模擬一個(gè)用戶購買u盤的行為。

用戶是客戶端類

商家:代理,代理某個(gè)品牌的u盤。

廠家:目標(biāo)類。

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

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

實(shí)現(xiàn)步驟:

實(shí)現(xiàn)步驟

1.創(chuàng)建一個(gè)接口,定義賣u盤的方法,表示你的廠家和商家做的事情2.創(chuàng)建廠家類,實(shí)現(xiàn)1步驟的接口3.創(chuàng)建商家,就是代理,也需要實(shí)現(xiàn)1步驟中的接口4.創(chuàng)建客戶端類,調(diào)用商家的方法買一個(gè)u盤

2.3 具體實(shí)現(xiàn)

Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解

實(shí)現(xiàn)步驟

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

1.創(chuàng)建一個(gè)接口,定義賣u盤的方法,表示你的廠家和商家做的事情

2.創(chuàng)建廠家類,實(shí)現(xiàn)1步驟的接口

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

3.創(chuàng)建商家,就是代理,也需要實(shí)現(xiàn)1步驟中的接口

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

4.創(chuàng)建客戶端類,調(diào)用商家的方法買一個(gè)u盤

import com.rango.business.TaoBao;public class shopMain { public static void main(String[] args){// 創(chuàng)建代理的商家淘寶對(duì)象 TaoBao taoBao = new TaoBao();// 我只向淘寶買一件產(chǎn)品,得到報(bào)價(jià) float price = taoBao.sell(2); System.out.println('購買一件產(chǎn)品.淘寶的報(bào)價(jià)為: '+price); }}所以我們?cè)俅慰偨Y(jié)代理類完成的功能:

目標(biāo)類中方法的調(diào)用功能增強(qiáng)

所屬我們只有一個(gè)代理商,我們實(shí)際上可以寫多個(gè)代理商,

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

我們?cè)俅慰偨Y(jié)一下靜態(tài)代理的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

實(shí)現(xiàn)簡(jiǎn)單容易簡(jiǎn)單

確定:當(dāng)你的項(xiàng)目中,目標(biāo)類的代理類很多的時(shí)候,有一下的缺點(diǎn)

當(dāng)目標(biāo)類增加了,代理類可能也需要成倍的增加當(dāng)你的接口中功能在增加了,或者修改了,會(huì)影響眾多的實(shí)現(xiàn)類,廠家類,代理都需要修改,影響比較多.

所以我們繼續(xù)學(xué)習(xí)動(dòng)態(tài)代理

第三章 動(dòng)態(tài)代理

本章,我們所掌握的是

1)什么是動(dòng)態(tài)代理?

使用jdk的反射機(jī)制,創(chuàng)建對(duì)象的能力,創(chuàng)建的是代理類的的對(duì)象.而不用我們創(chuàng)建類文件,不用寫java文件, 什么叫動(dòng)態(tài)?在程序執(zhí)行時(shí),調(diào)用jdk提供的方法才能創(chuàng)建代理類的對(duì)象

Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解

2)知道動(dòng)態(tài)代理能做什么?

2.1 靜態(tài)代理和動(dòng)態(tài)代理模式的對(duì)比

在靜態(tài)代理中目標(biāo)很多的時(shí)候,可以使用動(dòng)態(tài)代理,避免靜態(tài)代理的缺點(diǎn)

在靜態(tài)代理中目標(biāo)類很多時(shí)候,可以使用動(dòng)態(tài)代理,避免靜態(tài)代理的缺點(diǎn)。動(dòng)態(tài)代理中目標(biāo)類即使很多,

代理類數(shù)量可以很少,

當(dāng)你修改了接口中的方法時(shí),不會(huì)影響代理類。

動(dòng)態(tài)代理:在程序執(zhí)行過程中,使用jdk的反射機(jī)制,創(chuàng)建代理類對(duì)象,并動(dòng)態(tài)的指定要代理目標(biāo)類。換句話說:動(dòng)態(tài)代理是一種創(chuàng)建java象的能力,讓你不用創(chuàng)建 TaoBao類就能創(chuàng)建代理類對(duì)象,除去了中間商

在java中,要想創(chuàng)建對(duì)象

創(chuàng)建類文件,java 文件編譯為class 使用構(gòu)造方法,創(chuàng)建類的對(duì)象 2.1 動(dòng)態(tài)代理的介紹

Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解

動(dòng)態(tài)代理是指代理類對(duì)象在程序運(yùn)行時(shí)由JVM根據(jù)反射機(jī)制動(dòng)態(tài)生成的。動(dòng)態(tài)代理不需要定義代理類的,java源文件。動(dòng)態(tài)代理其實(shí)就是jdk運(yùn)行期間,動(dòng)態(tài)創(chuàng)建class字節(jié)碼并加載到JVM。動(dòng)態(tài)代理的實(shí)現(xiàn)方式常用的有兩種:使用JDK代理,與通過CGLlB動(dòng)態(tài)代理。

動(dòng)態(tài)代理的實(shí)現(xiàn):

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

Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解

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('張三');// 以上是常規(guī)方法執(zhí)行sayhello// 下面我們使用反射機(jī)制進(jìn)行創(chuàng)建sayhello方法,核心Method(類中的方法) HelloServiceImpl target = new HelloServiceImpl();// 獲取sayhello名稱對(duì)應(yīng)的Method類對(duì)象// public Method getM ethod(String name, Class<?>... parameterTypes)// 加入,該方法的參數(shù)有多個(gè)該怎么辦?// parameterTypes參數(shù)是一個(gè)類對(duì)象數(shù)組,按聲明的順序標(biāo)識(shí)方法的形式參數(shù)類型。 Method method = HelloService.class.getMethod('sayhello', String.class);// 通過Metho可以執(zhí)行sayhello方法的調(diào)用 /* * public Object invoke(Object obj, Object... args) * 表示執(zhí)行方法的調(diào)用 * 參數(shù): * 1.Object,表示對(duì)象,要執(zhí)行這個(gè)對(duì)象的方法 * 2.Object...args,方法執(zhí)行時(shí)的參數(shù)值 * 返回值: * Object:方法執(zhí)行后的返回值 * */ Object ret = method.invoke(target, '李四'); }}

2.2 回顧反射 Method類

Method類的結(jié)構(gòu)圖

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)

加入,該方法的參數(shù)有多個(gè)該怎么辦?

parameterTypes參數(shù)是一個(gè)類對(duì)象數(shù)組,按聲明的順序標(biāo)識(shí)方法的形式參數(shù)類型。

2.2.2 Method.invoke

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

* public Object invoke(Object obj, Object... args)* 表示執(zhí)行方法的調(diào)用* 參數(shù):* 1.Object,表示對(duì)象,要執(zhí)行這個(gè)對(duì)象的方法* 2.Object...args,方法執(zhí)行時(shí)的參數(shù)值* 返回值:* Object:方法執(zhí)行后的返回值*

到此這篇關(guān)于Java JDK動(dòng)態(tài)代理(AOP)用法及實(shí)現(xiàn)原理詳解的文章就介紹到這了,更多相關(guān)Java-AOP用法及實(shí)現(xiàn)原理分析內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
香蕉精品999视频一区二区| 欧美亚洲丝袜传媒另类| 91久久精品日日躁夜夜躁欧美| 中文字幕一区二区三区av| 欧美激情无毛| 日韩欧美久久一区| 久久精品国产77777蜜臀| 在线观看网站黄不卡| 美女国产一区二区| 欧美成人高清| 亚洲国产精品精华液ab| 99视频有精品| 欧美tk丨vk视频| 国产1区2区3区精品美女| 日韩欧美亚洲另类制服综合在线| 国产成人午夜高潮毛片| 欧美一级二级三级乱码| 国产成人av一区| 欧美一区二区三区播放老司机| 国产一区二区三区四区五区入口| 色婷婷av久久久久久久| 日韩电影在线观看电影| 一本到三区不卡视频| 青草av.久久免费一区| 在线观看国产91| 久久不见久久见中文字幕免费| 在线一区二区三区| 美女视频一区二区| 欧美乱熟臀69xxxxxx| 国产成人av一区二区三区在线 | 综合久久久久综合| 亚洲精品欧美| 亚洲v精品v日韩v欧美v专区| 久久综合九色综合欧美狠狠| 美女精品自拍一二三四| 日韩西西人体444www| 99久久精品国产一区二区三区| 国产欧美精品区一区二区三区| 国产精品a久久久久| 自拍偷拍亚洲欧美日韩| 夜夜夜久久久| 日产国产高清一区二区三区| 欧美视频一区二区在线观看| 国产成人免费视频网站| 国产欧美一区二区三区鸳鸯浴| 亚洲国产高清一区| 日韩精品电影在线| 欧美久久久一区| 91色婷婷久久久久合中文| 国产精品不卡视频| 国产日韩一区二区三区在线| 日韩精品成人一区二区在线| 69堂精品视频| 欧美福利视频导航| 97精品视频在线观看自产线路二| 中文字幕在线不卡一区二区三区| 亚洲欧美日韩精品久久久| 久久精品久久99精品久久| 日韩一级片网站| 欧美日一区二区在线观看| 亚洲国产美女搞黄色| 欧美日韩国产区一| 欧美高清一区二区| 亚洲亚洲人成综合网络| 欧美日韩一二三区| 欧美/亚洲一区| 亚洲一区二区在线播放相泽| 欧美日韩高清影院| 欧美激情性爽国产精品17p| 亚洲欧美激情小说另类| 欧美综合天天夜夜久久| 91丨九色porny丨蝌蚪| 亚洲国产另类av| 日韩一级在线观看| 亚洲精品影院| 国产最新精品免费| 国产精品久久久久久久午夜片| 久久久天天操| av在线不卡电影| 亚洲一区二区成人在线观看| 欧美精品 国产精品| 国产精品a级| 久久精品国产精品亚洲精品| 国产三级精品三级在线专区| 欧美一级一区| 国产91精品免费| 夜夜嗨av一区二区三区四季av| 欧美一二三在线| 亚洲一区二区精品在线| 国产成人在线影院| 洋洋成人永久网站入口| 精品日产卡一卡二卡麻豆| 午夜综合激情| av午夜精品一区二区三区| 亚洲一卡二卡三卡四卡无卡久久 | 人禽交欧美网站| 国产精品入口麻豆九色| 欧美在线影院一区二区| 国产字幕视频一区二区| 久久99精品久久久久久久久久久久| 国产午夜亚洲精品理论片色戒| 一本在线高清不卡dvd| av电影一区二区| 亚洲欧美日韩视频二区 | 久久精品人人| av激情亚洲男人天堂| 日韩二区三区四区| 国产精品卡一卡二| 在线成人av影院| 亚洲综合电影一区二区三区| 97久久超碰国产精品电影| 久久精品国内一区二区三区| 成人免费一区二区三区在线观看 | 亚洲精品成a人| 精品国产一区二区三区久久久蜜月| 久久精品成人| 午夜久久福利| 国产精品一区二区三区网站| 亚洲国产视频一区二区| 久久综合成人精品亚洲另类欧美| 欧美综合视频在线观看| 在线一区视频| 欧美在线网站| 国产成人免费视| 日本在线观看不卡视频| 久热这里只精品99re8久| 欧美日韩一区综合| 成人免费毛片片v| 六月丁香婷婷久久| 亚洲国产精品综合小说图片区| 国产精品天天摸av网| 日韩一区二区免费电影| 欧美三级韩国三级日本三斤 | 国产精品欧美一级免费| 日韩天堂在线观看| 在线观看免费成人| 国产精品久久一区二区三区| 国户精品久久久久久久久久久不卡| 国产美女精品一区二区三区| 亚洲国产视频一区| 亚洲日本在线a| 国产欧美日韩精品一区| 精品久久久久99| 91精品国产入口在线| 欧美日韩中文一区| 91久久精品网| 性欧美videos另类喷潮| 亚洲一级影院| 欧美影视一区| 国产成人av电影| 国产原创一区二区| 麻豆精品一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 91精品欧美久久久久久动漫| 欧美色图天堂网| 葵司免费一区二区三区四区五区| 亚洲在线黄色| 国产精品夜夜夜一区二区三区尤| 国产精品99免费看| 午夜激情一区| 欧美在线二区| 女女同性精品视频| 欧美精品二区| 欧美激情一级片一区二区| 91麻豆123| 色综合天天性综合| 午夜精品美女久久久久av福利| 欧美成人久久| 欧美xxx在线观看| 91美女精品福利| 91视频一区二区| 午夜精品视频| 精品1区2区3区4区| 亚洲国产1区| 亚洲精品欧美| 国产精品一级久久久| 亚洲欧美日韩国产一区| 色综合久久久久综合99| 色狠狠av一区二区三区| 欧美午夜精品一区| 欧美日韩国产美| 日韩欧美区一区二| 久久久久高清精品| 中文幕一区二区三区久久蜜桃| 欧美国产一区二区| 中文字幕 久热精品 视频在线| 亚洲国产激情av| 亚洲欧洲www| 亚洲激情欧美激情| 亚洲综合色区另类av| 日韩黄色在线观看| 国产尤物一区二区| 99r国产精品| 欧美日韩国产在线一区| 99人久久精品视频最新地址| 免费在线观看成人av| 欧美视频在线一区二区三区| 欧美一区二区三区免费| 久久蜜桃一区二区| 亚洲日本va在线观看|