Spring boot 和 jdk 動(dòng)態(tài)代理 以及Aop實(shí)現(xiàn)細(xì)節(jié)
1.Mapper生成代理對(duì)象


2.代理對(duì)象一定是基于接口實(shí)現(xiàn)的嗎? 答案是:不是
????????????Jdk 生成的代理對(duì)象 是 基于 接口 實(shí)現(xiàn)的
????????????CGLIB? 是 基于 接口 或者 實(shí)現(xiàn)類(lèi) 實(shí)現(xiàn) 的
????????????那么基于CGLIB 實(shí)現(xiàn)類(lèi) 代理對(duì)象 能實(shí)現(xiàn)AOP嗎?它的功能能否增強(qiáng)?
?????????????答案是:都是可以的,例如我一下開(kāi)啟一個(gè)事務(wù)嵌套:
????



?當(dāng)我想刪除部門(mén),和當(dāng)前部門(mén)下所有的員工,這時(shí)刪除成功的!并且我的數(shù)據(jù)庫(kù)里面是有記錄的,證明 當(dāng) 注入 實(shí)現(xiàn)類(lèi)? 是可以實(shí)現(xiàn)功能增強(qiáng)(aop)的
3.切換 jdk 和 SpringBoot 代理
????在SpringBoot的配置文件中設(shè)置: false 為 jdk ?ture?為?cglib
4.區(qū)別
CGLIB:

jdk代理:

5.Spring CGLIB 是用于生成代理對(duì)象的工具
Spring CGLIB 是用于生成代理對(duì)象的工具,而不是代理對(duì)象本身。當(dāng)使用 CGLIB 創(chuàng)建代理時(shí),?。。。?!代理對(duì)象會(huì)是目標(biāo)類(lèi)的一個(gè)子類(lèi)?。。。。。?/strong>,而且會(huì)重寫(xiě)目標(biāo)類(lèi)中的所有非 final
方法。這樣,當(dāng)你調(diào)用代理對(duì)象上的方法時(shí),可以執(zhí)行一些自定義邏輯,然后調(diào)用真實(shí)目標(biāo)對(duì)象上的相應(yīng)方法。
6.是否一定要使用Aop 切面注解@Aspect 才能實(shí)現(xiàn)功能增強(qiáng)?
????答案:不是
????用@Service去注入一個(gè)實(shí)現(xiàn)類(lèi),
如果服務(wù)類(lèi)不涉及事務(wù)、安全檢查或性能分析?其他需要攔截方法調(diào)用的特性,那么通常注入的就是代理對(duì)象。
如果服務(wù)類(lèi)不涉及這些特性,那么注入的是 普通類(lèi)
7.jdk 不能注入 實(shí)現(xiàn)類(lèi)對(duì)象,只能注入 接口的代理對(duì)象,不然會(huì)報(bào)錯(cuò)

可以強(qiáng)制使用@FnableAsync @EnableCaching?