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

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

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

服務器之家 - 編程語言 - Java教程 - JDK動態代理與CGLib動態代理的區別對比

JDK動態代理與CGLib動態代理的區別對比

2021-07-15 10:44邋遢的流浪劍客 Java教程

今天小編就為大家分享一篇關于JDK動態代理與CGLib動態代理的區別對比,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

案例:

?
1
2
3
4
public interface forumservice {
 void removetopic(int topicid);
 void removeforum(int forumid);
}

對相關方法進行性能監控

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class forumserviceimpl implements forumservice {
 public void removetopic(int topicid) {
 // performancemonitor.begin("com.hand.proxy.forumserviceimpl.removetopic");
 system.out.println("模擬刪除topic記錄:" + topicid);
 try {
  thread.sleep(20);
 } catch (interruptedexception e) {
  e.printstacktrace();
 }
 // performancemonitor.end();
 }
 public void removeforum(int forumid) {
 // performancemonitor.begin("com.hand.proxy.forumserviceimpl.removeforum");
 system.out.println("模擬刪除forum記錄:" + forumid);
 try {
  thread.sleep(20);
 } catch (interruptedexception e) {
  e.printstacktrace();
 }
 // performancemonitor.end();
 }
}

性能監控實現類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class performancemonitor {
 // 通過一個threadlocal保存與調用線程相關的性能監視信息
 private static threadlocal<methodperformance> performancerecord = new threadlocal<methodperformance>();
 // 啟動對某一目標方法的性能監視
 public static void begin(string method) {
 system.out.println("begin monitor...");
 methodperformance mp = new methodperformance(method);
 performancerecord.set(mp);
 }
 public static void end() {
 system.out.println("end monitor...");
 methodperformance mp = performancerecord.get();
 // 打印出方法性能監視的結果信息
 mp.printperformance();
 }
}

用于記錄性能監控信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class performancemonitor {
 // 通過一個threadlocal保存與調用線程相關的性能監視信息
 private static threadlocal<methodperformance> performancerecord = new threadlocal<methodperformance>();
 // 啟動對某一目標方法的性能監視
 public static void begin(string method) {
 system.out.println("begin monitor...");
 methodperformance mp = new methodperformance(method);
 performancerecord.set(mp);
 }
 public static void end() {
 system.out.println("end monitor...");
 methodperformance mp = performancerecord.get();
 // 打印出方法性能監視的結果信息
 mp.printperformance();
 }
}

1、jdk動態代理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class performancemonitor {
 // 通過一個threadlocal保存與調用線程相關的性能監視信息
 private static threadlocal<methodperformance> performancerecord = new threadlocal<methodperformance>();
 // 啟動對某一目標方法的性能監視
 public static void begin(string method) {
 system.out.println("begin monitor...");
 methodperformance mp = new methodperformance(method);
 performancerecord.set(mp);
 }
 public static void end() {
 system.out.println("end monitor...");
 methodperformance mp = performancerecord.get();
 // 打印出方法性能監視的結果信息
 mp.printperformance();
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
public class forumservicetest {
 @test
 public void proxy() {
 forumservice forumservice = new forumserviceimpl();
 performancehandler handler = new performancehandler(forumservice);
 forumservice proxy = (forumservice) proxy.newproxyinstance(forumservice.getclass().getclassloader(),
  forumservice.getclass().getinterfaces(), handler);
 proxy.removeforum(10);
 proxy.removetopic(1012);
 }
}

得到以下輸出信息:

begin monitor...
模擬刪除forum記錄:10
end monitor...
com.hand.proxy.forumserviceimpl.removeforum花費21毫秒
begin monitor...
模擬刪除topic記錄:1012
end monitor...
com.hand.proxy.forumserviceimpl.removetopic花費21毫秒

2、cglib動態代理

?
1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
 <groupid>cglib</groupid>
 <artifactid>cglib</artifactid>
 <version>2.2.2</version>
</dependency>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class cglibproxy implements methodinterceptor {
 private enhancer enhancer = new enhancer();
 public object getproxy(class clazz) {
 enhancer.setsuperclass(clazz);
 enhancer.setcallback(this);
 return enhancer.create();
 }
 public object intercept(object obj, method method, object[] args, methodproxy proxy) throws throwable {
 performancemonitor.begin(obj.getclass().getname() + "." + method.getname());
 object result = proxy.invokesuper(obj, args);
 performancemonitor.end();
 return result;
 }
}
?
1
2
3
4
5
6
7
8
9
public class forumservicetest2 {
 @test
 public void proxy() {
 cglibproxy proxy = new cglibproxy();
 forumserviceimpl forumservice = (forumserviceimpl) proxy.getproxy(forumserviceimpl.class);
 forumservice.removeforum(10);
 forumservice.removetopic(1023);
 }
}

1)、jdk和cglib的區別

  • jdk動態代理只能對實現了接口的類生成代理,而不能針對類
  • cglib是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法(繼承)

2)、spring在選擇用jdk還是cglib的依據

  • 當bean實現接口時,spring就會用jdk的動態代理
  • 當bean沒有實現接口時,spring使用cglib來實現
  • 可以強制使用cglib(在spring配置中加入<aop:aspectj-autoproxy proxy-target-class=“true”/>)

3)、jdk和cglib的性能對比

  • 使用cglib實現動態代理,cglib底層采用asm字節碼生成框架,使用字節碼技術生成代理類,在jdk1.6之前比使用java反射效率要高。唯一需要注意的是,cglib不能對聲明為final的方法進行代理,因為cglib原理是動態生成被代理類的子類。
  • 在jdk1.6、jdk1.7、jdk1.8逐步對jdk動態代理優化之后,在調用次數較少的情況下,jdk代理效率高于cglib代理效率,只有當進行大量調用的時候,jdk1.6和jdk1.7比cglib代理效率低一點,但是到jdk1.8的時候,jdk代理效率高于cglib代理

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

原文鏈接:https://blog.csdn.net/qq_40378034/article/details/86504177

延伸 · 閱讀

精彩推薦
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
主站蜘蛛池模板: 欧美一区二 | 毛片特级 | 日韩在线免费视频 | 日本少妇一区二区三区 | 欧美综合在线一区 | 国产精品福利91 | 欧美伦理电影一区二区 | 在线免费黄色网址 | 欧美在线日韩 | 国产欧美精品 | 精品国产子伦久久久久久小说 | 国产成人精品免高潮在线观看 | 午夜午夜精品一区二区三区文 | 一级片av| 欧美激情综合网 | av一区二区三区 | www.天天草 | 亚洲高清久久 | 欧美欧美欧美 | 欧美大片高清在线观看平台 | 国产不卡免费视频 | 久久国产亚洲 | 国产精品久久久久久久7电影 | 老女肥熟av免费观看 | 午夜成人免费电影 | 欧美bbbxxx| 自拍视频一区 | 久久综合导航 | 亚洲电影天堂在线观看 | 在线观看的av | 日韩国产一区二区三区 | 国产精品永久免费视频 | 精品久 | 日韩av一区二区在线观看 | 极品美女销魂一区二区三区 | 91久久国产综合久久91精品网站 | 91精品福利少妇午夜100集 | 天天天干天天天操 | 日韩欧美国产精品综合嫩v 在线视频 中文字幕 | 一区二区三区在线免费观看 | 天天操导航|