各位小伙伴
今天我們分享的是
spring IOC(控制反轉(zhuǎn))的
基于注解的注入 :就是用注解標(biāo)簽的方式來(lái)替換掉我們 xml 配置文件里面 bean 的注冊(cè)和依賴關(guān)系的描述(有不清楚的小伙伴可以去看一下我們之前文章)
我們來(lái)實(shí)踐一下
先來(lái)創(chuàng)建一個(gè)小項(xiàng)目吧!
我們就直接在原來(lái)的項(xiàng)目上進(jìn)行修改了佳励!
把 jar 包 spring-aop-4.2.1.RELEASE.jar 導(dǎo)入到我們的項(xiàng)目中袍辞,包的位置在spring-framework-4.2.1.RELEASE\libs 文件夾里面。
就是他了足丢!
加入 context 約束脯丝,雖然我們不進(jìn)行配置,但要告訴容器我們有哪些文件使用注解的方式提鸟,讓容器去掃描文件。
在 appliactionContext.xml 配置里面定義掃描需要用到的直接的包路徑仅淑。
后面就不用再添加別的內(nèi)容了称勋!
現(xiàn)在就在需要注解的 bean 對(duì)象前面加入注解標(biāo)識(shí)符
@Component ?所有的類上面都可以這么寫(xiě),只是不規(guī)范涯竟!
規(guī)范一點(diǎn)的寫(xiě)法是:
@Repository:這個(gè)注解主要是聲明 dao 的類組件
@Service:這個(gè)注解主要是聲明 service 服務(wù)類
@Controller:主要是聲明控制類 (springmvc/struts2 action/controller)
我們的例子中沒(méi)有這邊的代碼赡鲜,就不截圖了
上面是類的聲明空厌,下面是我們的依賴關(guān)系。
@Resource java 的注解 ,默認(rèn)是以 byName 方式注入,byName 找不到的話,再用 byType 去匹配
@Autowired spring 的注解,默認(rèn)是以 byType 注入,-如果有多個(gè)實(shí)現(xiàn)類,他再用 byName 的方式去匹配
測(cè)試結(jié)果
@Qualifier?spring的注解银酬,可以指定實(shí)現(xiàn)的方法名稱嘲更。
@Autowired @Qualifier 兩個(gè)一起 用,指定用byName的方式進(jìn)行匹配
@Scope bean的作用域
注意: 注解不需要設(shè)置 setter 方法 ,但是我們還是一般寫(xiě)上,因?yàn)楫?dāng)我們?cè)谂渲梦募锩媾渲昧?bean 的時(shí)候 ,而且通過(guò)配置文件描述了依賴關(guān)系,會(huì)有限是用配置,如果沒(méi)有setter方法,會(huì)報(bào)異常揩瞪。
Spring IOC 總結(jié)?
Spring 的IOC(控制反轉(zhuǎn))是通過(guò)依賴注入(dependency injection)來(lái)實(shí)現(xiàn)的
優(yōu)點(diǎn) :
減少了對(duì)象的創(chuàng)建和管理 ,使代碼層次更加清晰赋朦。
Spring 的IOC容器是一個(gè)輕量級(jí)的容器 ,沒(méi)有侵入性(不依賴容器的API) ,不需要實(shí)現(xiàn)一些特殊接口。
鼓勵(lì)我們面向接口編程李破。
減少了代碼的耦合,將耦合的部分推到了配置文件中 ,如果他們的關(guān)系發(fā)生了改變,只需要修改配置文件宠哄。
今天就到這里了
再見(jiàn)了