全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)常見(jiàn)問(wèn)題正文

Spring中的Bean:基于Annotation的裝配

更新時(shí)間:2024-01-23 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在Spring中,盡管使用XML配置文件可以實(shí)現(xiàn)Bean的裝配工作,但如果應(yīng)用中Bean的數(shù)量較多,會(huì)導(dǎo)致XML配置文件過(guò)于臃腫,從而給維護(hù)和升級(jí)帶來(lái)一定的困難。

  Java從JDK5.0以后,提供了Annotation(注解)功能,Spring也提供了對(duì)Annotation技術(shù)的全面支持。Spring3中定義了一系列的Annotation(注解),常用的注解如下。

1705973478038_基于Annotation的裝配.jpg

  1.@Component:可以使用此注解描述Spring中的Bean,但它是一個(gè)泛華概念,僅僅表示一個(gè)組件(Bean),并且可以作用在任何層次。使用時(shí)只需將該注解標(biāo)注在相應(yīng)類(lèi)上即可。

  2.@Repository:用于將數(shù)據(jù)訪問(wèn)層(DAO層)的類(lèi)標(biāo)識(shí)為Spring中的Bean,其功能與@Component相同。

  3.@Service:通常作用在業(yè)務(wù)層(Service層),用于將業(yè)務(wù)層的類(lèi)標(biāo)識(shí)為Spring中的Bean,其功能與@Component相同。

  4.@Controller:通常作用在控制層(如Struts2的Action),用于將控制層的類(lèi)標(biāo)識(shí)為Spring中的Bean,其功能與@Component相同。

  5.@Autowired:用于對(duì)Bean的屬性變量、屬性的Set方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,配合對(duì)應(yīng)的注解處理器完成Bean的自動(dòng)配置工作。默認(rèn)按照Bean的類(lèi)型進(jìn)行裝配。

  6.@Resource:其作用與Autowired一樣。其區(qū)別在于@Autowired默認(rèn)按照Bean類(lèi)型進(jìn)行裝配,而@Resource默認(rèn)按照Bean實(shí)例名稱(chēng)進(jìn)行裝配。@Resource中有兩個(gè)重要屬性:name和type。Spring將name屬性解析為Bean實(shí)例名稱(chēng),type屬性解析為Bean實(shí)例類(lèi)型。如果指定name屬性,則按實(shí)例名稱(chēng)進(jìn)行裝配;如果指定type屬性,則按Bean類(lèi)型進(jìn)行裝配;如果都不指定,則先按Bean實(shí)例名稱(chēng)裝配,如果不能匹配,則再按照Bean類(lèi)型進(jìn)行裝配;如果都無(wú)法匹配,則拋出NoSuchBeanDefinitionException異常。

  7.@Qualifier:與@Autowired注解配合使用,會(huì)默認(rèn)的按Bean類(lèi)型裝配修改為按Bean的實(shí)例名稱(chēng)裝配,Bean的實(shí)例名稱(chēng)由@Qualifier注解的參數(shù)指定。

  在上面幾個(gè)注解中,雖然@Repository、@Service和@Controller功能與@Component注解的功能相同,但是為了更加清楚地表示出標(biāo)注類(lèi)的用途,建議使用@Repository、@Service與@Controller分別對(duì)實(shí)現(xiàn)類(lèi)進(jìn)行標(biāo)注。

  本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

  作者:黑馬程序員Java培訓(xùn)學(xué)院

  首發(fā):https://java.itheima.com

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!