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

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

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

瀏覽:53日期: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久久,三上悠亚国产精品一区二区三区
三上亚洲一区二区| 亚洲欧美日韩视频二区| 免费欧美在线视频| 久久国产中文字幕| 欧美xxxx中国| 国产一区二区三区日韩精品| 国产精品天天看天天狠| 在线观看一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品视频在线你懂得| 久久精品电影| 日韩免费视频| 亚洲福利久久| 图片区亚洲欧美小说区| 久久激情一区| 久久中文字幕av| 91精品精品| 欧美日韩激情| 欧美日本久久| 久久久久久久久成人| 日韩一区二区三区在线看| 日本精品另类| 国产九一精品| 亚洲专区在线| 中文字幕视频精品一区二区三区| 亚洲欧美激情诱惑| 免费在线看一区| 亚洲二区免费| 日本欧美一区二区| 欧美黑人巨大videos精品| 国产精品久久亚洲不卡| 99精品国产一区二区三区| 丝瓜av网站精品一区二区| 免费久久精品视频| 热久久久久久| 欧美在线观看视频一区| 久久亚洲精品伦理| 国产精品久久777777毛茸茸| 久久精品青草| 国产主播一区| 午夜精品一区二区三区国产| 美女精品在线观看| 亚洲精品大片| 精品日韩一区| 一区在线观看| 国产精品天天看天天狠| 成人羞羞视频播放网站| 日韩一级精品| 日韩国产一二三区| 开心激情综合| 99国产精品视频免费观看一公开 | 国产午夜久久| 欧美日韩亚洲三区| 免费在线欧美黄色| 久久久久亚洲| 少妇精品久久久| 精品中文在线| 欧美日韩国产免费观看视频| 欧美日本不卡高清| 国产精品av一区二区| 视频精品一区| 日韩国产欧美一区二区| 亚洲97av| 欧美精品日日操| 亚洲一级大片| 在线看片国产福利你懂的| 天堂成人免费av电影一区| 精品视频91| 国产精品老牛| 国产精品亚洲综合久久| 久久亚洲在线| 国产精品亚洲综合在线观看| 在线视频观看日韩| 国产精品极品国产中出| 亚洲欧美日本视频在线观看| 日韩成人精品一区| 少妇精品久久久一区二区| 国产伦精品一区二区三区视频| 欧美在线资源| 日韩在线第七页| 国产精品s色| 亚洲欧美成人综合| 欧美天堂视频| 欧美视频久久| 视频一区欧美精品| 影视先锋久久| 国内精品伊人| 国产亚洲欧美日韩精品一区二区三区 | 欧美一级全黄| 亚洲午夜视频| 日韩免费久久| 国产剧情一区| 亚洲69av| 午夜在线精品偷拍| 久久婷婷久久| 国语对白精品一区二区| 欧美日本精品| 亚洲精品免费观看| 免费日韩av片| 欧美日韩国产欧| 深夜视频一区二区| 国产日韩1区| 日韩精品成人在线观看| 最近国产精品视频| 日韩专区在线视频| 国产一级一区二区| 欧美在线影院| 国产一区二区视频在线看| 欧美精品国产一区| 一区二区高清| 亚洲视频二区| 久久国产88| 欧美日韩国产精品一区二区亚洲| 岛国av在线网站| 国产一区精品福利| 日本va欧美va精品发布| 狂野欧美性猛交xxxx| 免费久久精品视频| 天堂中文av在线资源库| 日韩精品永久网址| 久久亚洲专区| 欧美综合二区| 欧美亚洲tv| 高清精品久久| 热三久草你在线| 亚洲精品2区| 日本亚洲欧洲无免费码在线| 欧美国产另类| 亚洲成人二区| 日韩av不卡一区二区| 国产日韩视频在线| 日本免费一区二区三区四区| 国产亚洲一区在线| 国产精品免费不| 激情综合网五月| 欧美精品福利| 国产在线不卡| 国产精品天天看天天狠| 黑丝美女一区二区| 国产欧美69| 午夜久久黄色| 九九久久国产| 一区二区不卡| 亚洲电影有码| 国产午夜久久av| 99国产精品免费视频观看| 偷拍欧美精品| 荡女精品导航| 日韩综合一区二区三区| 国产麻豆久久| 国产探花一区二区| 午夜av一区| 国产成人精品福利| 亚洲啊v在线免费视频| 欧美日韩精品免费观看视欧美高清免费大片 | 香蕉久久一区| 91一区二区三区四区| 人人爽香蕉精品| 久久久男人天堂| 午夜精品影视国产一区在线麻豆| 日本一区二区免费高清| 日本精品另类| 黄色免费成人| 亚洲黄色网址| 国产乱码精品一区二区亚洲| 久久久精品久久久久久96 | 麻豆91在线播放| 日韩精品一卡二卡三卡四卡无卡| 福利片在线一区二区| 日韩国产精品久久久久久亚洲| 亚洲成人二区| 久久精品国产久精国产爱| 老牛国产精品一区的观看方式| 荡女精品导航| 国产欧美三级| 免费黄网站欧美| 精品午夜视频| 亚州精品视频| 国产美女一区| 久久久久一区| 精品美女久久| 国产精品一区亚洲| 亚洲欧美在线专区| 成人av二区| 欧美日韩免费观看视频| 久久精品亚洲一区二区| 国产剧情一区二区在线观看| 亚洲日本久久| 久久午夜视频| 免费av一区| 日韩国产专区| 给我免费播放日韩视频| 欧美黑人做爰爽爽爽| 日本色综合中文字幕| 亚洲美女91| 亚洲精品美女91| 综合欧美亚洲| 日韩精品社区| 日本不卡一区二区| 日本免费新一区视频|