AOP意思是:面向切面編程。好處:能夠降低耦合度、提高程序的可重用性、開發(fā)效率。
直白語言解釋:就是調(diào)用一個(gè)方法之前或者之后,自動(dòng)執(zhí)行的一系列自定義語句。
底層原理:使用代理的機(jī)制。
- 接口 + 實(shí)現(xiàn)類 : 使用jdk動(dòng)態(tài)代理。
- 只有實(shí)現(xiàn)類 :spring采用cglib字節(jié)碼增強(qiáng),在運(yùn)行時(shí)創(chuàng)建目標(biāo)類的子類,從而對(duì)目標(biāo)類增強(qiáng)。
術(shù)語
- target:目標(biāo)類,需要被代理的類,例如:UserService
- Joinpoint:連接點(diǎn),可能會(huì)被攔截的方法,例如:UserService里面的所有方法 —>廁所里面的的所有坑
- PointCut:切入點(diǎn),已經(jīng)被增強(qiáng)的連接點(diǎn)。例如:addUser() —>被使用的坑
- advice:通知/增強(qiáng),增強(qiáng)的代碼、切面的工作被稱為通知。例如after、before
- weaving:織入。把增強(qiáng)應(yīng)用到目標(biāo)對(duì)象target來創(chuàng)建新的代理對(duì)象的過程
- aspect:切面。切入點(diǎn)(PointCut)和通知(advice)的結(jié)合。一個(gè)切入點(diǎn)和一個(gè)通知,就能組成一個(gè)特殊的面。
主要的應(yīng)用:事務(wù)管理、性能監(jiān)控、安全檢查、緩存、日志。
IOC:控制反轉(zhuǎn),控制權(quán)的轉(zhuǎn)移。把權(quán)限轉(zhuǎn)移給spring的ioc容器管理。(ioc容器用于與其他框架整和)
DI:對(duì)IOC這種思想的操作。容器通過反射給屬性賦值。
簡(jiǎn)單的IOC原理
- 加載xml的配置文件,遍歷其中的標(biāo)簽(使用dom4j)
- 獲取標(biāo)簽中的 id 和 class 屬性,加載 class 屬性對(duì)應(yīng)的類,并創(chuàng)建 bean
- 遍歷標(biāo)簽中的標(biāo)簽,獲取屬性值,并將屬性值填充到 bean 中
- 將 bean 注冊(cè)到 bean 容器中