精品欧美一区二区三区在线观看 _久久久久国色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)

在线观看视频你懂得| 天堂资源在线亚洲资源| 久久久久免费看| 欧美丝袜美腿| 在线观看av一区| 男人天堂成人网| 人妻丰满熟妇av无码区hd| 蜜桃av综合| 久热精品在线视频| 三级男人添奶爽爽爽视频| 日韩成人亚洲| 一区二区三区精品视频| 久久久久久精| 国产美女永久免费| 国产欧美一级| xxxx欧美18另类的高清| 国产xxxx视频| 日韩欧美三区| 狠狠色狠狠色综合日日小说| 亚洲欧洲久久| 午夜av免费在线观看| 久草精品在线观看| 热久久99这里有精品| 午夜剧场免费在线观看| 亚洲bt欧美bt精品777| 欧美日韩高清在线| 久久久久久久久久久视频| 日本亚洲精品| 久久免费看少妇高潮| 亚洲字幕一区二区| 波多野结衣在线观看一区| 欧美日韩99| 少妇精69xxtheporn| 国模私拍在线观看| 国产一区二区高清在线| 在线观看免费成人| 成人黄色av片| 影音先锋中文在线视频| 国产精品色在线| 欧美精品一区在线| 天堂网在线中文| 国产成人午夜片在线观看高清观看| 国产成+人+综合+亚洲欧洲 | 99ri日韩精品视频| 欧美日韩aaaaaa| 另类小说第一页| 大胆人体一区二区| 五月婷婷久久丁香| 六月婷婷激情综合| 超碰在线免费公开| 国产精品国产三级国产aⅴ入口| 欧美日韩精品久久| 午夜影院免费视频| 成人精品视频一区二区三区尤物| 亚洲xxxxx| 国产精品久久久久久久久毛片 | www.com在线观看| 久久aⅴ国产欧美74aaa| 国产男人精品视频| 中文字幕丰满人伦在线| 欧美aaaaa成人免费观看视频| 日产精品久久久一区二区福利| 国产成人无码精品| 中文日韩在线| 欧洲中文字幕国产精品| 久久国产精品免费看| 一区二区三区成人精品| 97精品伊人久久久大香线蕉| 亚洲黄色一区二区| 亚洲欧美日韩国产| 国产99在线|中文| 中国女人真人一级毛片| 免费精品视频在线| 91精品国产综合久久久久久久久| 一区二区国产欧美| 国产乱子轮精品视频| av激情久久| 日韩专区第一页| 久久婷婷国产综合国色天香 | 天堂中文在线8| 久久亚洲精品国产精品紫薇| 视频在线精品一区| 黄色成人影院| 亚洲成人av一区二区三区| 少妇高潮毛片色欲ava片| 欧美久久天堂| 欧美性极品少妇| 日本高清免费在线视频| 97se亚洲| 国产亚洲欧美视频| 91在线播放观看| 亚洲国产午夜| 国产精品精品久久久久久| 最近中文字幕免费观看| 国产专区欧美精品| 国产一区二区精品免费| 国产九色在线| 亚洲精品视频免费看| 欧美,日韩,国产在线| 日韩欧美少妇| 欧美tk丨vk视频| 午夜理伦三级做爰电影| 999久久久国产精品| 欧美激情久久久| 日本在线播放视频| 九色综合狠狠综合久久| 九9re精品视频在线观看re6| 午夜小视频在线| 亚洲成人av免费| 高清av免费看| 久久97久久97精品免视看秋霞| 中文字幕国产亚洲| 中文字幕日韩一级| 狠狠色丁香久久婷婷综| 久久婷婷开心| 午夜小视频福利在线观看| 一本一本大道香蕉久在线精品| 天堂av.com| 国产剧情在线观看一区| 久久久久久免费精品| 在线免费观看日韩视频| 成人av在线看| 青草全福视在线| 国产精品99| 精品爽片免费看久久| 亚洲av鲁丝一区二区三区 | 亚洲电影一级片| 欧美国产日韩视频| 91中文字幕在线视频| 久久久精品国产免费观看同学| 亚洲熟妇无码av在线播放| 福利一区视频| 亚洲人成五月天| 五月天婷婷综合网| 国产精品自在在线| 亚洲一区三区视频在线观看| 超碰国产一区| 亚洲国产精品大全| 久久久久久久久99| 国内精品伊人久久久久av影院| 欧洲精品亚洲精品| 咪咪网在线视频| 欧美精品一区二区三区蜜桃视频| 天天天天天天天天操| 精品一二三四在线| 亚洲美女搞黄| 粉嫩av一区二区三区四区五区| 亚洲人成人99网站| 韩国av中文字幕| av高清不卡在线| 黄色一级片在线看| 99精品中文字幕在线不卡| 欧美成人激情视频| 超碰人人人人人人| 樱花影视一区二区| 久久久久久国产精品日本| 91九色精品国产一区二区| 国产精品视频免费观看www| 国产天堂在线| 欧美三级中文字幕在线观看| a资源在线观看| 蜜臀av亚洲一区中文字幕| 先锋影音网一区| 欧美激情不卡| 久久精品中文字幕一区| 国产麻豆精品一区| 亚洲男人的天堂一区二区| 麻豆网站免费观看| 在线播放一区| 久久青青草综合| 浪潮色综合久久天堂| 夜夜嗨av一区二区三区四区| 中文字幕一区二区三区四区免费看 | 亚洲资源在线观看| 永久免费未满蜜桃| 一区二区三区成人精品| 欧美亚洲丝袜| 热久久久久久| 色在人av网站天堂精品| 天堂av一区二区三区| 在线影院国内精品| 免费看一级黄色| 丁香激情综合国产| 国产l精品国产亚洲区久久| 美女毛片一区二区三区四区| 国产精品稀缺呦系列在线| 二区在线播放| 亚洲精品国精品久久99热| 日日夜夜狠狠操| 亚洲视频香蕉人妖| 日韩aaaaa| 日韩精品久久久久久| 少妇熟女一区二区| 国产精品中文字幕制服诱惑| 国产精品mp4| 最近中文字幕免费mv2018在线| 亚洲国产日韩欧美在线图片 | 久久久久看片| 国产成人精品免费看在线播放| 白嫩白嫩国产精品| 国产精品丝袜久久久久久高清| 粗大黑人巨茎大战欧美成人| 亚洲精品国产品国语在线| 一级视频在线播放| 欧美日韩亚洲高清| 我家有个日本女人| 国产偷国产偷亚洲高清人白洁| 中文字幕乱妇无码av在线| 国产婷婷精品| 国产a级黄色大片| 欧美三级美国一级| 春色成人在线视频| 高清亚洲高清| 日韩av123| 欧美四级在线| 色妞久久福利网| 天堂资源最新在线| 欧美成人a视频| 在线观看国产精品视频| 精品欧美aⅴ在线网站| 国产97免费视频| 国产精品久久三区| www.久久av| 99re视频精品| 久久久久亚洲av无码网站| 蜜桃一区二区三区四区| 玩弄中年熟妇正在播放| 欧美日韩爆操| 天天成人综合网| 精品不卡一区| 久久青青草综合| 欧美wwwwww| 国产高清不卡av| 国产精品白丝久久av网站| 国产精品精品视频| 国精产品一区一区三区四川| 97久久精品人搡人人玩| 超免费在线视频| 欧美黄色性视频| 污视频在线看网站| 乱亲女秽乱长久久久| 成人av毛片| 国产一区二区三区网站| 欧美一区二区少妇| 日韩精品免费观看| 国产综合无码一区二区色蜜蜜| 日韩一区二区三区视频| 国产精品爽爽久久久久久| 欧美日韩高清在线| 国产又粗又猛又爽又黄的| 欧美日韩日日摸| 91女人18毛片水多国产| 欧美日韩国产精品成人| 国产精品久久久久久久免费| 91精品国产色综合久久久蜜香臀| 国产精品久久久久久久久久久久久久久久久久 | 精品一区二区精品| 亚洲一区二区图片| 国产麻豆精品95视频| 熟妇女人妻丰满少妇中文字幕| 国产乱子伦一区二区三区国色天香| av中文字幕网址| 国精产品一区一区三区mba视频| 在线免费黄色网| 国产精品1区二区.| 无码av免费精品一区二区三区| 丁香激情综合国产| mm131美女视频| 亚洲国产高清在线| 懂色av蜜臀av粉嫩av永久| 最新高清无码专区| 免费又黄又爽又色的视频| 婷婷一区二区三区| 国产精品久久久久久人| 91福利资源站| 91丨九色丨蝌蚪丨对白| 日韩欧美一二三区| 欧美一级视频免费| 日韩高清中文字幕| av一本在线| 欧美成人午夜激情视频| 成av人片在线观看www| 日本中文字幕久久看| 国产成人免费av一区二区午夜| 99久久综合狠狠综合久久止| 天天躁日日躁狠狠躁欧美巨大小说| 欧美一区二区高清在线观看| 欧美成人直播| 日本福利视频一区| 日本欧美一区二区| 秋霞午夜鲁丝一区二区| 久久久综合精品| 人与动物性xxxx| 婷婷综合在线观看| 中文字幕理论片| 精品久久久久香蕉网| 黄色网址在线播放| 欧美日本啪啪无遮挡网站| 国产日韩电影| 92看片淫黄大片欧美看国产片 | 亚洲黄色av女优在线观看| 国产视频精选在线| 九九热在线精品视频| 午夜欧美巨大性欧美巨大| 91久久在线视频| 欧美爱爱网站| 在线观看17c| 日日噜噜夜夜狠狠视频欧美人| 国产又粗又猛大又黄又爽| 久久久久久久综合狠狠综合| 国产这里有精品| 欧美三级中文字幕| 亚洲日本中文字幕在线| 久久高清视频免费| jizz免费一区二区三区| 成人欧美一区二区三区视频| 国产麻豆一区二区三区精品视频| 国产精品三级一区二区| 免费在线日韩av| 亚洲av无码一区东京热久久| 一区二区中文字幕在线| 日韩综合在线观看| 精品国产欧美一区二区| 黄视频网站在线| 国产精品igao视频| 亚洲+变态+欧美+另类+精品| 老子影院午夜伦不卡大全| 韩日精品视频一区| 亚洲最大成人综合网| 日韩欧美大尺度| 少妇高潮一区二区三区99小说| 欧美成年人在线观看| 国产极品一区| 午夜精品一区二区在线观看| 日韩电影在线免费看| 色无极影院亚洲| 欧美视频在线视频| 欧洲av在线播放| 欧美黑人一区二区三区| 日韩欧美中文在线观看| 中国 免费 av| 激情国产一区二区| 永久免费看片直接| 欧美人妇做爰xxxⅹ性高电影| 国际av在线| 国产成人精品久久二区二区91| 日韩超碰人人爽人人做人人添| 精品成在人线av无码免费看| 成人永久看片免费视频天堂| 激情视频在线播放| 精品少妇一区二区三区| 五月婷婷视频在线观看| 91麻豆蜜桃| 在线播放日韩| 成人免费av片| 色欧美日韩亚洲| av网站无病毒在线| 国产精品美女www| 欧美mv日韩| 欧美日韩理论片| 亚洲一区在线观看免费 | 久久精品视频9| 精品福利一区二区三区| 91资源在线观看| 久久久精品动漫| 日韩精品一级二级 | 手机av免费在线观看| 91国内精品久久| 国产99亚洲| 中文字幕av专区| 亚洲免费观看高清在线观看| 亚洲国产中文字幕在线| 国产91ⅴ在线精品免费观看| 少妇精品久久久一区二区三区| 欧美自拍小视频| 亚洲欧美成aⅴ人在线观看| 国产激情久久久久久熟女老人av| 久久青草福利网站| 国产麻豆精品久久| 中文字幕日韩久久| 欧美日韩国产色视频| yiren22亚洲综合伊人22| 91免费国产网站| 夜久久久久久| 国产伦精品一区二区三区视频女| 欧美喷潮久久久xxxxx| 黄视频网站在线看| 久久爱av电影| 精品无人码麻豆乱码1区2区| 久久久综合久久久| 亚洲午夜激情免费视频| 激情综合婷婷| 欧美牲交a欧美牲交aⅴ免费真| 国产精品久久久久永久免费观看 | 亚洲精品国产精品乱码不99按摩 | 日本免费中文字幕在线| 成人三级在线| 日本强好片久久久久久aaa| 青娱乐国产精品| 亚洲欧美中文另类|