spring簡(jiǎn)介
spring是J2EE應(yīng)用程序框架,是輕量級(jí)的IoC和AOP的容器框架,主要是針對(duì)javaBean的生命周期進(jìn)行管理的輕量級(jí)容器,可以單獨(dú)使用,也可以和Struts框架,mybati框架等組合使用。
IOC與DI
ioc控制反轉(zhuǎn)。把對(duì)象的創(chuàng)建就給spring配置。DI依賴注入,向類里面的屬性設(shè)置值。依賴注入不能單獨(dú)存在,需要在ioc基礎(chǔ)上完成。
屬性注入的幾種方式:
(1)構(gòu)造函數(shù)注入

(2)set注入

(3)p名稱空間

對(duì)象的注入:

使用注解創(chuàng)建對(duì)象:
@Service,@Component,@Controller,@Repository
注解注入對(duì)象:
@Autowired?? @Resource
AOP
Aspect Oriented Programming 面向切面編程。解耦是程序員編碼開發(fā)過程中一直追求的。AOP也是為了解耦所誕生。
具體思想是:定義一個(gè)切面,在切面的縱向定義處理方法,處理完成之后,回到橫向業(yè)務(wù)流.
AOP 主要是利用動(dòng)態(tài)代理模式的技術(shù)來實(shí)現(xiàn)的
.
有接口的情況下使用jdk代理。沒有接口的情況使用 cglib動(dòng)態(tài)代理。
AOP操作術(shù)語
1? Joinpoint(連接點(diǎn)):在spring中這些連接點(diǎn)指的就是可以被增強(qiáng)的方法。
2.在類里面可以很多的方法增強(qiáng),比如在實(shí)際的操作中,只是增強(qiáng)了類里面的add方法和update方法,實(shí)際增強(qiáng)的方法稱為切入點(diǎn)。
前置通知:在方法執(zhí)行前通知。
后置通知:在方法執(zhí)行后通知。
異常通知:在方法出現(xiàn)異常
最終通知:后置之后執(zhí)行
環(huán)繞通知:在方法之前和方法之后通知。
3.Aspect(切面)把增強(qiáng)應(yīng)用到具體的方法上面,這個(gè)過程稱之為切面。
AOP 的實(shí)現(xiàn)原理
AOP分為靜態(tài)AOP和動(dòng)態(tài)AOP。靜態(tài)AOP是指AspectJ實(shí)現(xiàn)的AOP,他是將切面代碼直接編譯到Java類文件中。動(dòng)態(tài)AOP是指將切面代碼進(jìn)行動(dòng)態(tài)織入實(shí)現(xiàn)的AOP。Spring的AOP為動(dòng)態(tài)AOP,實(shí)現(xiàn)的技術(shù)為: JDK提供的動(dòng)態(tài)代理技術(shù) 和 CGLIB(動(dòng)態(tài)字節(jié)碼增強(qiáng)技術(shù)) 。盡管實(shí)現(xiàn)技術(shù)不一樣,但 都是基于代理模式 , 都是生成一個(gè)代理對(duì)象 。


使用注解操作AOP

SpringMVC
運(yùn)行原理圖:

1.用戶發(fā)起請(qǐng)求,dispatcherServlet獲取用戶訪問的路徑。
2.dispatcherServlet去找相應(yīng)的處理器。
3.dispatcherServlet調(diào)用處理器訪問controller.
4.controller調(diào)用service,返回modelAndView。
5.dispatcherServlet得到處理結(jié)果。
6.調(diào)用view解析器對(duì)model進(jìn)行解析
7.將解析后的model數(shù)據(jù)傳給view顯示
8.http響應(yīng)給瀏覽器。
<context:component-scan base-package=""/>掃描指定的包中的類上的注解,常用的注解有:
