国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Java動態代理和反射機制詳解

Java動態代理和反射機制詳解

2021-07-22 16:31MoreThinking Java教程

這篇文章主要介紹了Java動態代理和反射機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

反射機制

java語言提供的一種基礎功能,通過反射,我們可以操作這個類或對象,比如獲取這個類中的方法、屬性和構造方法等。

動態代理:分為jdk動態代理、cglib動態代理(spring中的動態代理)。

靜態代理

預先(編譯期間)確定了代理者與被代理者之間的關系,也就是說,若代理類在程序運行前就已經存在了,這種情況就叫靜態代理

動態代理

代理類在程序運行時創建的代理方式。也就是說,代理類并不是在java代碼中定義的,而是在運行期間根據我們在java代碼中的“指示”動態生成的。

動態代理比靜態代理的優勢在于:

動態代理可以很方便的對代理類的函數進行統一的處理(invoke),而不是修改每個代理類的函數,更靈活和擴展。

 jdk的動態代理(依賴于接口)

  1. 在java的動態代理機制中,有兩個重要的類或接口,一個是invocationhandler接口,另一個是proxy類。
  2. invocationhandler接口是給動態代理類實現的,負責處理被代理對象的操作
  3. proxy類是用來創建動態代理類實例對象的,只有得到這個對象,才能調用需要代理的方法。
  4. 動態代理的代理類是在靜態代理類上進行修改,將動態代理類實現invocationhandler接口,重寫invoke方法,invoke方法通過傳入的被代理類方法和參數來執行。

如下實例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public interface appservice {
 void createapp(string name);
 void deleteapp(string name);
}
 
//代理類(比如微商代理)
public class appserviceimpl implements appservice{
 
 @override
 public void createapp(string name) {
  system.out.print("app["+name+"] has been created.");
 }
 
 @override
 public void deleteapp(string name) {
  system.out.print("app["+name+"] has been delete.");
 }
}
 
 
import java.lang.reflect.invocationhandler;
import java.lang.reflect.method;
 
public class loggerinterceptor implements invocationhandler {
 private object target; //委托類(被代理類)的實例,比如廠家
 public loggerinterceptor(object target){
  this.target = target;
 }
 @override
 public object invoke(object proxy, method method, object[] args)throws throwable {
  system.out.println("entered "+target.getclass().getname()+"-"+method.getname()+",with arguments{"+args[0]+"}");
  object result = method.invoke(target, args);
  //調用目標對象的方法 (調用廠家的方法(createapp)及參數(kevin test))
  system.out.println("before return:"+result);
  return result;
 }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.lang.reflect.proxy;
 
public class test {
 
public static void main(string[] args) {
    appservice target = new appserviceimpl();//生成目標對象 (代理類的對象)
    //接下來創建代理對象
    appservice proxy = (appservice) proxy.newproxyinstance(
    target.getclass().getclassloader(),
    target.getclass().getinterfaces(), new loggerinterceptor(target));
    proxy.createapp("kevin test1");
    proxy.deleteapp("kevin test2");
  }
 
}
 
/**
* 1、jdk的動態代理實現方式是依賴于接口的,首先使用接口來定義好操作規范。
* 2、通過proxy類產生的代理對象調用被代理對象的操作。
* 3、而這個操作又被分發給invocationhandler接口的invoke方法具體執行
*
* 在java的動態代理機制中,有兩個重要的類或接口,一個是invocationhandler接口、另一個則是 proxy類,這個類和接口是實現我們動態代理所必須用到的。
invocationhandler接口是給動態代理類實現的,負責處理被代理對象的操作的,而proxy是用來創建動態代理類實例對象的,因為只有得到了這個對象我們才能調用那些需要代理的方法。
*
* 此方法的參數含義如下
proxy:代表動態代理對象
method:代表正在執行的方法
args:代表當前執行方法傳入的實參
返回值:表示當前執行方法的返回值
*
* 如上:
* 使用了proxy類的newproxyinstance方法生成代理對象,然后用這個對象去調用createapp()和deleteapp()方法,
* 其實系統會將這2個方法分發給invoke()方法區執行。其中proxy對象的類是系統幫我們動態創建了,其實實現了我們的業務接口appservice
*
*/

cglib動態代理(繼承方式)

cglib動態代理中使用methodinterceptor來實現動態代理類。

攔截器methodinterceptor中就是由methodproxy的invoksuper方法調用代理方法的。

methodproxy類生成代理方法和代理方法的簽名。

jdk動態代理和cglib動態代理的區別:

  1. jdk動態代理是實現了被代理對象的接口,cglib是繼承了被代理對象。
  2. cglib因為是繼承機制,所以無法代理被final修飾的方法。
  3. jdk和cglib都是在運行期間生產字節碼,jdk是直接寫class字節碼,cglib使用asm框架寫class字節碼;cglib代理實現更復雜,生成代理類比jdk效率低。
  4. jdk調用代理方法,是通過反射實現機制調用,cglib是通過fashclass機制直接調用方法,效率更高。

 fastcalss機制:

為代理類和被代理類個生成一個class,這個class會為代理類或被代理類的方法分配一個index。

這個index當做一個入參,fashclass就可以直接定位要調用的方法,并直接進行調用。這樣省去了反射調用,所以效率高。

以上所述是小編給大家介紹的java動態代理和反射機制詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/MoreThinking/p/10310251.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久re在线| 国产视频久久久久久久 | 91香蕉视频在线 | 91av影院 | 欧美一级二级视频 | 色吧综合网| 色女人的天堂 | 色精品 | 日韩a∨ | 欧美尹人| 中文字幕在线观看av | 婷婷午夜激情网 | 欧美九九九 | 国产精品成人一区二区三区夜夜夜 | 免费毛片在线 | 日韩免费在线观看视频 | 欧美区亚洲区 | 国产成人精品亚洲日本在线观看 | 久久艹色 | 国产日韩一区 | 久在线视频| 中文字幕av一区二区 | 久久久精品黄色 | 麻豆av在线播放 | 毛片网站免费在线观看 | 亚洲蜜桃精久久久久久久 | 99综合在线 | 日韩视频区 | 精品无码三级在线观看视频 | 亚洲精品久久久一区二区三区 | 免费一级黄色毛片 | 国产成人欧美一区二区三区的 | 中文字幕在线免费 | 欧美精品在线播放 | 久久成人人人人精品欧 | 激情五月婷婷综合 | 欧美成人免费 | 午夜影院免费观看视频 | 午夜精品在线 | 日韩一级视频 | 国产精品资源在线观看 |