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

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

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

香港云服务器
服務器之家 - 編程語言 - Java教程 - 實例講解Java中動態代理和反射機制

實例講解Java中動態代理和反射機制

2021-07-12 15:08Java教程網 Java教程

在本篇文章里小編給各位分享了關于Java中動態代理和反射機制的相關知識點內容,有需要的朋友們學習下。

反射機制

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

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

靜態代理

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

動態代理

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

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

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

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

在java的動態代理機制中,有兩個重要的類或接口,一個是invocationhandler接口,另一個是proxy類。

invocationhandler接口是給動態代理類實現的,負責處理被代理對象的操作

proxy類是用來創建動態代理類實例對象的,只有得到這個對象,才能調用需要代理的方法。

動態代理的代理類是在靜態代理類上進行修改,將動態代理類實現invocationhandler接口,java電子書重寫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
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
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就可以直接定位要調用的方法,并直接進行調用。這樣省去了反射調用,所以效率高。

延伸 · 閱讀

精彩推薦
853
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 天堂精品 | 久久久www成人免费无遮挡大片 | 欧美一区二区三区 | 精品麻豆剧传媒av国产九九九 | 吴梦梦到粉丝家实战华中在线观看 | 一级毛片黄 | 亚洲精品国产成人 | 激情综合婷婷 | 高清成人 | 国产综合精品一区二区三区 | 午夜黄色影院 | 伊人网站 | 欧美福利在线 | 成人免费视频网站在线观看 | 中文字幕在线观看不卡视频 | 一级黄色片视频 | 久久精品中文字幕一区二区 | 欧美日韩在线精品 | 成人av免费 | 97色婷婷成人综合在线观看 | 欧美国产日韩精品 | 欧美一区二区三区在线播放 | 国产精品一区在线观看 | 精精国产xxxx视频在线野外 | 欧美精品成人 | 亚洲福利在线观看 | 欧州一区二区三区 | 一本久久a久久精品亚洲 | 精品一区二区三区免费视频 | 国产成人99久久亚洲综合精品 | 爱爱视频网站 | 久久久久99 | www.久久精品 | 午夜在线电影 | 久久中文字幕一区 | 午夜电影在线看 | 国产成人av一区二区三区 | 亚洲精品白浆高清久久久久久 | 亚洲午夜在线 | 99亚洲伊人久久精品影院 | 欧美日韩久 |