精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Boot 中的 AOP,到底是 JDK 動(dòng)態(tài)代理還是 Cglib 動(dòng)態(tài)代理?

開發(fā) 前端
Spring 中的 AOP,有接口就用 JDK 動(dòng)態(tài)代理,沒有接口就用 Cglib 動(dòng)態(tài)代理。 Spring Boot 中的 AOP,2.0 之前和 Spring 一樣;2.0 之后首選 Cglib 動(dòng)態(tài)代理,如果用戶想要使用 JDK 動(dòng)態(tài)代理,需要自己手動(dòng)配置。

好啦,開始今天的正文。

大家都知道,AOP 底層是動(dòng)態(tài)代理,而 Java 中的動(dòng)態(tài)代理有兩種實(shí)現(xiàn)方式:

  • 基于 JDK 的動(dòng)態(tài)代理
  • 基于 Cglib 的動(dòng)態(tài)代理

這兩者最大的區(qū)別在于基于 JDK 的動(dòng)態(tài)代理需要被代理的對(duì)象有接口,而基于 Cglib 的動(dòng)態(tài)代理并不需要被代理對(duì)象有接口。

那么小伙伴們不禁要問,Spring 中的 AOP 是怎么實(shí)現(xiàn)的?是基于 JDK 的動(dòng)態(tài)代理還是基于 Cglib 的動(dòng)態(tài)代理?

1. Spring

先來說結(jié)論,Spring 中的動(dòng)態(tài)代理,具體用哪種,分情況:

如果代理對(duì)象有接口,就用 JDK 動(dòng)態(tài)代理,否則就是 Cglib 動(dòng)態(tài)代理。

如果代理對(duì)象沒有接口,那么就直接是 Cglib 動(dòng)態(tài)代理。

來看看這段來自官方文檔的說辭:

圖片

可以看到,即使在最新版的 Spring 中,依然是如上策略不變。即能用 JDK 做動(dòng)態(tài)代理就用 JDK,不能用 JDK 做動(dòng)態(tài)代理就用 Cglib,即首選 JDK 做動(dòng)態(tài)代理。

2. Spring Boot

Spring Boot 和 Spring 一脈相承,那么在動(dòng)態(tài)代理這個(gè)問題上是否也是相同的策略呢?抱歉,這個(gè)還真不一樣。

Spring Boot 中對(duì)這個(gè)問題的處理,以 Spring Boot2.0 為節(jié)點(diǎn),前后不一樣。

在 Spring Boot2.0 之前,關(guān)于 Aop 的自動(dòng)化配置代碼是這樣的(Spring Boot 1.5.22.RELEASE):

@Configuration
@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class })
@ConditionalOnProperty(prefix = "spring.aop", name = "auto", havingValue = "true", matchIfMissing = true)
public class AopAutoConfiguration {

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false",
matchIfMissing = true)
public static class JdkDynamicAutoProxyConfiguration {

}

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true",
matchIfMissing = false)
public static class CglibAutoProxyConfiguration {

}

}

可以看到,這個(gè)自動(dòng)化配置主要是在討論 application.properties 配置文件中的 spring.aop.proxy-target-class 屬性的值。

具體起作用的是 @ConditionalOnProperty 注解,關(guān)于這個(gè)注解中的幾個(gè)屬性,松哥也來稍微說下:

  • prefix:配置文件的前綴。
  • name:配置文件的名字,和 prefix 共同組成配置的 key。
  • having:期待配置的值,如果實(shí)際的配置和 having 的值相同,則這個(gè)配置就會(huì)生效,否則不生效。
  • matchIfMissing:如果開發(fā)者沒有在 application.properties 中進(jìn)行配置,那么這個(gè)配置類是否生效。

基于如上介紹,我們很容易看出:

  • 如果開發(fā)者設(shè)置了spring.aop.proxy-target-class 為 false,則使用 JDK 代理。
  • 如果開發(fā)者設(shè)置了spring.aop.proxy-target-class 為 true,則使用 Cglib 代理。
  • 如果開發(fā)者一開始就沒配置spring.aop.proxy-target-class 屬性,則使用 JDK 代理。
  • 這是 Spring Boot 2.0 之前的情況。

再來看看 Spring Boot 2.0(含)之后的情況(Spring Boot 2.0.0.RELEASE):

@Configuration
@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class,
AnnotatedElement.class })
@ConditionalOnProperty(prefix = "spring.aop", name = "auto", havingValue = "true", matchIfMissing = true)
public class AopAutoConfiguration {

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {

}

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
public static class CglibAutoProxyConfiguration {

}

}

可以看到,大部分配置都是一樣的,有一個(gè)地方不太相同,那就是 matchIfMissing 屬性的值。可以看到,從 Spring Boot2.0 開始,如果用戶什么都沒有配置,那么默認(rèn)情況下使用的是 Cglib 代理。

3. 實(shí)踐

最后我們寫一個(gè)簡單的例子驗(yàn)證一下我們的想法。

首先創(chuàng)建一個(gè) Spring Boot 項(xiàng)目(本案例使用最新版 Spring Boot,即默認(rèn)使用 Cglib 代理),加入三個(gè)依賴即可,如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

接下來我們創(chuàng)建一個(gè) IUserService 接口,如下:

public interface IUserService {
void hello();
}

然后我們?cè)賮韯?chuàng)建一個(gè)該接口的實(shí)現(xiàn)類:

@Service
public class UserServiceImpl implements IUserService {
@Override
public void hello() {

}
}

方法不用實(shí)現(xiàn)。

再來一個(gè)簡單的切面:

@EnableAspectJAutoProxy
@Aspect
@Component
public class LogAspect {
@Before("execution(* org.javaboy.demo.UserServiceImpl.*(..))")
public void before(JoinPoint jp) {
System.out.println("jp.getSignature().getName() = " + jp.getSignature().getName());
}
}

最后再來一個(gè)簡單的測(cè)試方法,注入 IUserService 實(shí)例:

@RestController
public class HelloController {
@Autowired
IUserService iUserService;
@GetMapping("/hello")
public void hello() {
iUserService.hello();
}
}

DBUEG 運(yùn)行一下,就可以看到 IUserService 是通過 Cglib 來代理的。

圖片

如果我們想用 JDK 來代理,那么只需要在 application.properties 中添加如下配置即可:

spring.aop.proxy-target-class=false

添加完成后,重新 DEBUG,如下圖:

圖片

可以看到,已經(jīng)使用了 JDK 動(dòng)態(tài)代理了。

如果用的是 Spring Boot 1.5.22.RELEASE 這個(gè)版本,那么即使不在 application.properties 中添加配置,默認(rèn)也是 JDK 代理,這個(gè)我就不測(cè)試了,小伙伴們可以自己來試試。

4. 小結(jié)

總結(jié)一下:

  • Spring 中的 AOP,有接口就用 JDK 動(dòng)態(tài)代理,沒有接口就用 Cglib 動(dòng)態(tài)代理。
  • Spring Boot 中的 AOP,2.0 之前和 Spring 一樣;2.0 之后首選 Cglib 動(dòng)態(tài)代理,如果用戶想要使用 JDK 動(dòng)態(tài)代理,需要自己手動(dòng)配置。

just this。

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2023-12-06 08:23:44

代理模式設(shè)計(jì)模式

2024-09-05 09:35:58

CGLIBSpring動(dòng)態(tài)代理

2021-07-14 11:07:56

AOPJDKCglib

2024-01-04 07:42:44

JavaCGLIBJDK

2025-02-27 00:32:35

2021-04-22 09:58:15

JDK代理動(dòng)態(tài)

2019-11-29 16:21:22

Spring框架集成

2021-07-06 06:39:22

Java靜態(tài)代理動(dòng)態(tài)代理

2022-12-26 07:37:23

Nacos代理模式運(yùn)用場(chǎng)景、

2023-07-05 08:17:38

JDK動(dòng)態(tài)代理接口

2017-05-11 21:30:01

Android動(dòng)態(tài)代理ServiceHook

2011-04-06 11:41:25

Java動(dòng)態(tài)代理

2022-07-05 14:19:30

Spring接口CGLIB

2015-09-22 11:09:47

Java 8動(dòng)態(tài)代理

2009-06-22 15:10:00

java 編程AOP

2020-12-29 05:34:00

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

2012-08-28 10:59:26

JavaJava動(dòng)態(tài)代理Proxy

2022-02-22 22:44:46

接口源碼對(duì)象

2025-07-29 07:30:23

Spring動(dòng)態(tài)代理代碼

2011-03-23 10:40:51

java代理模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产黄色免费观看| 亚洲一级中文字幕| hd国产人妖ts另类视频| av综合在线播放| 日本久久久久亚洲中字幕| 欧美人与禽zoz0善交| 日韩精品久久久久久久软件91| 亚洲成av人影院| 亚洲激情一区二区三区| 亚洲精品911| 日一区二区三区| 色综合五月天导航| 男人操女人动态图| 亚洲三级av| 欧美在线一二三| 人妻av无码专区| 国产高清在线看| 高清av一区二区| 国产精品丝袜视频| 日本亚洲欧美在线| 911久久香蕉国产线看观看| 精品中文视频在线| 超碰91在线播放| 秋霞国产精品| 五月综合激情日本mⅴ| 中文字幕中文字幕99| 视频在线观看你懂的| 国产一区二区三区四区在线观看| 奇门遁甲1982国语版免费观看高清 | 啦啦啦中文在线观看日本| 国产欧美日韩精品一区| 精品欧美一区二区精品久久| 国产深喉视频一区二区| 奇米综合一区二区三区精品视频| 668精品在线视频| 欧美精品xxxxx| 香蕉久久网站| 日韩中文在线不卡| 久久久久久久久久久久久久久| 国产精品网在线观看| 日韩一区二区三区免费看| 在线免费视频一区| 99精品国自产在线| 日本二三区不卡| www国产黄色| 小早川怜子影音先锋在线观看| 亚洲激情在线激情| 男插女免费视频| 日本三级在线视频| 国产精品久线观看视频| 婷婷五月色综合| 国产人成在线观看| 国产午夜精品理论片a级大结局 | 日韩在线综合| 正在播放国产一区| 一本在线免费视频| 欧美第十八页| 久久精品夜夜夜夜夜久久| 美国一级片在线观看| 999久久久免费精品国产| 日韩专区在线观看| 亚洲二区在线播放| 欧美日韩国产综合网| 欧美黄色三级网站| 国产黄色免费观看| 奇米精品一区二区三区四区 | 成人在线免费观看av| 欧亚在线中文字幕免费| 一本久久a久久精品亚洲| 国产福利一区视频| 日韩美香港a一级毛片| 欧美一区二区视频在线观看2020| 深爱五月综合网| 国产伦精品一区二区三区免费优势| 精品国产亚洲一区二区三区在线观看| 国产xxxx视频| 亚洲成人一品| www.日本久久久久com.| 久久久久亚洲av片无码下载蜜桃| 精品成人久久| 国产91在线视频| 一级做a爱片性色毛片| 韩国一区二区三区| 国产日产精品一区二区三区四区| 日韩在线无毛| 亚洲欧洲日产国产综合网| 日产精品久久久久久久蜜臀| 国产色播av在线| 欧美三区在线观看| 日本xxxx免费| 精品国产91乱码一区二区三区四区 | 黑人精品xxx一区| www.com黄色片| 风间由美性色一区二区三区四区| 亚洲视频一区二区三区| 成人免费黄色小视频| 国产乱码精品| 成人一区二区电影| 水莓100国产免费av在线播放| 国产精品视频一区二区三区不卡| 日本a在线天堂| 三级成人黄色影院| 日韩三级高清在线| 久久久视频6r| 亚洲午夜一区| 国产色视频一区| 天堂中文网在线| 日韩美女视频一区二区| 97在线免费公开视频| 国产精品一区免费在线 | 在线免费观看日韩av| 性欧美欧美巨大69| 国产suv精品一区二区| 国产自产一区二区| 成人免费在线播放视频| 日韩欧美精品在线观看视频| 日韩精品一区二区三区中文字幕 | 亚洲午夜久久久久久久国产| 国产在线日韩| 亚洲一区二区久久久久久久| 精品无人乱码| 精品免费在线观看| 午夜性福利视频| 国产精品久久久乱弄| 日韩av电影免费观看高清| 亚洲精品97久久中文字幕| 1024成人网| 亚洲欧美在线精品| 国产欧美日韩精品一区二区三区 | 中文字幕一区二区三区四区不卡 | 日韩av片在线播放| 国模一区二区三区白浆| 四虎一区二区| 美女100%一区| 亚洲精品天天看| 日韩av在线播放观看| 成人免费毛片片v| 久久艹国产精品| 日本亚州欧洲精品不卡| 色久欧美在线视频观看| 免费黄色一级大片| 久久久久国产精品麻豆ai换脸 | 中文字幕超碰在线| 99久久免费精品| 日本在线xxx| 久久午夜影院| 91爱视频在线| 亚洲日本香蕉视频| 欧美性生交大片免费| 人妻无码一区二区三区| 国产日韩专区| 欧美少妇一区| 日韩网站中文字幕| 中文字幕亚洲精品| 在线观看视频二区| 自拍偷自拍亚洲精品播放| 麻豆网站免费观看| 国产一区美女| 精品无人区一区二区三区| www.成人影院| 在线亚洲国产精品网| 一卡二卡三卡在线| 一区二区三区精品在线观看| 三大队在线观看| 亚洲日产国产精品| 欧美日韩精品免费看 | 性高湖久久久久久久久| 欧洲国产精品| 日本久久二区| 欧美国产日韩一区| 男人的天堂在线视频| 欧美天堂亚洲电影院在线播放| 亚洲a∨无码无在线观看| 国内精品在线播放| 国产精品一线二线三线| 国产99久久精品一区二区300| 国产精品高潮呻吟久久av黑人| 欧美成人高清在线| 亚洲精品一区在线观看| 中文字幕免费观看| 亚洲视频在线观看三级| 波多野结衣有码| 日本不卡在线视频| 天天做天天躁天天躁| 丝袜美腿综合| 91精品视频播放| 日韩脚交footjobhdboots| 视频在线观看99| 欧美一级片免费| 欧美性感一区二区三区| 久久久精品视频在线| 久久久www成人免费毛片麻豆 | 国产精品18| 5566日本婷婷色中文字幕97| 777电影在线观看| 精品国产sm最大网站免费看| 波多野结衣在线观看视频| 亚洲女人的天堂| 国产特级黄色录像| 国产精品小仙女| 午夜精品在线免费观看| 亚洲欧洲日本mm| 伊人久久大香线蕉午夜av| 极品尤物一区| 成人做爰www免费看视频网站| 五月天国产在线| 欧美日本亚洲视频| 在线免费黄色| 亚洲免费一在线| 成人免费视频国产| 欧美日韩成人在线| 丰满少妇xoxoxo视频| 一区二区三区免费在线观看| 91l九色lporny| 99精品视频在线观看免费| 黄色三级视频在线播放| 青青草国产精品97视觉盛宴| 五十路熟女丰满大屁股| 一区二区日韩欧美| 亚洲 国产 日韩 综合一区| 秋霞综合在线视频| 国产精品二区三区| 精品中文视频| 成人精品一区二区三区| 二区三区不卡| 欧美亚洲国产日韩2020| 国产精品探花在线| 欧美成人免费全部| 快射av在线播放一区| 一区二区在线视频播放| 精品av中文字幕在线毛片| 亚洲国产精品成人av| www.日韩高清| 日韩女优av电影| 国产黄色片免费| 欧美一级日韩免费不卡| 国产精品熟女久久久久久| 欧美日韩日本视频| 中文在线字幕av| 91官网在线免费观看| 天天操夜夜操视频| 欧美体内谢she精2性欧美| 日本道在线观看| 欧美视频裸体精品| 成人免费毛片视频| 欧美午夜片在线观看| 成人黄色三级视频| 欧美在线你懂的| 中文字幕一区二区三区人妻四季| 日本韩国视频一区二区| 国产天堂第一区| 欧美三级日韩三级国产三级| 中文字幕观看在线| 欧美浪妇xxxx高跟鞋交| 国产又大又长又粗| 7777精品伊人久久久大香线蕉 | 91爱视频在线| 国偷自产一区二区免费视频| 琪琪亚洲精品午夜在线| av在线一区不卡| 国产一区视频在线| 日韩精品视频一区二区三区| 成人羞羞视频免费| 欧美大胆a级| 日韩电影免费观看高清完整| 精品99在线| 麻豆md0077饥渴少妇| 亚洲国产裸拍裸体视频在线观看乱了中文 | 一区二区三区四区欧美| 在线免费观看日本欧美爱情大片| 成年人视频大全| 亚洲国产精品一区制服丝袜| 国产精品欧美激情在线观看| 久久国产精品99精品国产| 欧美色图校园春色| 91麻豆国产自产在线观看| 免费看污片的网站| 亚洲免费三区一区二区| 国产成人无码一区二区三区在线| 色综合久久久久久久久久久| 亚洲自拍第二页| 精品日韩av一区二区| 久热av在线| 久久久999成人| 高清在线视频不卡| 成人激情视频在线| 精品久久ai电影| 一区不卡视频| 在线综合亚洲| 中文字幕第88页| 成人福利视频网站| 老司机福利在线观看| 亚洲国产婷婷综合在线精品| 国产又粗又猛又爽又| 日韩欧美中文字幕一区| 国产原创av在线| 欧美夫妻性生活xx| 99久久伊人| 国产欧美欧洲| 99久久99热这里只有精品| www.日本在线播放| 精品一区免费av| 波多野结衣一本| 亚洲国产欧美在线| 91中文字幕在线视频| 亚洲乱码国产乱码精品精| a免费在线观看| 国产精品久久久久久久久久东京| 成功精品影院| 人人妻人人澡人人爽精品欧美一区| 99精品国产一区二区青青牛奶| 性生生活大片免费看视频| 久久众筹精品私拍模特| 久久黄色免费视频| 欧美乱妇23p| 粉嫩一区二区三区国产精品| 国模私拍一区二区三区| 久久一级大片| 自拍偷拍亚洲色图欧美| 日韩在线观看一区二区| 久久人人爽人人人人片| 一区二区三区av电影| 91av久久久| 在线观看免费高清视频97| 91精品论坛| 久久久精品国产一区二区三区| 欧美日韩福利| 香蕉网在线视频| 亚洲日韩欧美一区二区在线| 无码人妻av一区二区三区波多野| 亚洲精品久久久久久久久| 欧美bbbxxxxx| av一区二区三区在线观看| 亚洲国产精品综合久久久| 国模私拍视频在线观看| 国产精品你懂的在线| 成人一级免费视频| 一区二区亚洲欧洲国产日韩| 欧美大片免费| 欧美一区二区视频在线| 久久婷婷av| 精品成人无码一区二区三区| 在线影院国内精品| 国产高清免费av在线| 国产精品久久久精品| 欧美限制电影| a在线观看免费视频| 国产精品剧情在线亚洲| 国产精品亚洲lv粉色| 欧美成人一二三| 网站一区二区| 精品成在人线av无码免费看| 国产精品123区| 久久精品久久国产| 亚洲电影免费观看高清| 中文字幕乱码在线播放| 欧洲一区二区在线观看| 日本伊人午夜精品| 日本黄色免费片| 日韩一区二区三区在线视频| 男男gaygays亚洲| 久久涩涩网站| 日韩av不卡在线观看| 亚洲少妇xxx| 精品久久久久久久久久久院品网| 99爱在线视频| 欧洲精品久久| 狠狠色狠狠色综合日日91app| 色欲一区二区三区精品a片| 日韩一区二区三区视频在线观看| 蜜臀av在线| 欧美激情视频一区二区三区| 久久精品免费观看| 久热精品在线观看| 亚洲日本成人网| 97精品资源在线观看| 日韩av高清在线看片| 久久精品日产第一区二区三区高清版| 亚洲性生活大片| 久久久噜噜噜久久| 国产亚洲电影| 亚洲丝袜在线观看| 色综合天天综合色综合av | 中文字幕色av一区二区三区| 亚洲精品久久久狠狠狠爱| 国产精品2018| 亚洲欧美一级二级三级| 国产一二三四五区| 欧美一区二区三区思思人| 日韩精品av| 欧美日韩午夜爽爽| 国产亚洲精品资源在线26u| 国产美女精品视频国产| 欧美中文字幕在线观看| 91成人网在线观看| 日韩精品无码一区二区三区久久久 | 日韩av片在线看| 亚洲激情自拍偷拍| 阿v免费在线观看| 精品乱子伦一区二区三区|