日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

注解@resource的作用_Bean基于Annotation(注解)的装配方式

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注解@resource的作用_Bean基于Annotation(注解)的装配方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Spring中,盡管使用XML配置文件可以實(shí)現(xiàn)Bean的裝配工作,但如果應(yīng)用中有很多Bean時(shí),會(huì)導(dǎo)致XML配置文件過于臃腫,給后續(xù)的維護(hù)和升級(jí)工作帶來一定的困難。為此,Spring提供了對(duì)Annotation(注解)技術(shù)的全面支持。

Spring中定義了一系列的注解,常用的注解如下所示。·

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

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

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

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

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

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

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

在上面幾個(gè)注解中,雖然@Repository、@Service與@Controller功能與@Component注解的功能相同,但為了使標(biāo)注類本身用途更加清晰,建議在實(shí)際開發(fā)中使用@Repository、@Service與@Controller分別對(duì)實(shí)現(xiàn)類進(jìn)行標(biāo)注。下面,通過一個(gè)案例來演示如何通過這些注解來裝配Bean。

(1)在chapter02項(xiàng)目的src目錄下,創(chuàng)建一個(gè)com.itheima.annotation包,在該包中創(chuàng)建接口UserDao,并在接口中定義一個(gè)save()方法,如文件2-14所示。

(2)在com.itheima.annotation包中,創(chuàng)建UserDao接口的實(shí)現(xiàn)類UserDaoImpl,該類需要實(shí)現(xiàn)接口中的save()方法,如文件2-15所示。

在文件2-15中,首先使用@Repository注解將UserDaoImpl類標(biāo)識(shí)為Spring中的Bean,其寫法相當(dāng)于配置文件中的編寫。然后在save()方法中輸出打印一句話,用于驗(yàn)證是否成功調(diào)用了該方法。

(3)在com.itheima.annotation包中,創(chuàng)建接口UserService,在接口中同樣定義一個(gè)save()方法,如文件2-16所示。

(4)在com.itheima.annotation包中,創(chuàng)建UserService接口的實(shí)現(xiàn)類UserServiceImpl,該類需要實(shí)現(xiàn)接口中的save()方法,如文件2-17所示。

在文件2-17中,首先使用@Service注解將UserServiceImpl類標(biāo)識(shí)為Spring中的Bean,這相當(dāng)于配置文件中的編寫;然后使用@Qualifier注解標(biāo)注在屬性u(píng)serDao上,這相當(dāng)于配置文件中的寫法;最后在該類的save()方法中調(diào)用userDao中的save()方法,并輸出一句話。

(5)在com.itheima.annotation包中,創(chuàng)建控制器類UserController,編輯后如文件2-18所示。

在文件2-18中,首先使用@Controller注解標(biāo)注了UserController類,這相當(dāng)于在配置文件中編寫;然后使用了@Resource注解標(biāo)注在userService屬性上,這相當(dāng)于在配置文件中編寫;最后在其save()方法中調(diào)用了userService中的save()方法,并輸出一句話

(6)在com.itheima.annotation包中,創(chuàng)建配置文件beans6.xml,在配置文件中編寫基于Annotation裝配的代碼,如文件2-19所示。

從上述代碼可以看出,文件2-19與之前的配置文件有很大不同。首先,在元素中,增加了第4行,第7行和第8行中包含有context的約束信息;然后通過配置來開啟注解處理器;最后分別定義了3個(gè)Bean對(duì)應(yīng)所編寫的3個(gè)實(shí)例。與XML裝備方式有所不同的是,這里不再需要配置子元素。

上述Spring配置文件中的注解方式雖然較大程度簡化了XML文件中Bean的配置,但仍需要在Spring配置文件中一一配置相應(yīng)的Bean,為此Spring注解提供了另外一種高效的注解配置方式(對(duì)包路徑下的所有Bean文件進(jìn)行掃描),其配置方式如下。

所以可以將上述文件2-19中第9~16行代碼進(jìn)行如下替換(推薦)。

注意Spring 4.0以上版本使用上面的代碼對(duì)指定包中的注解進(jìn)行掃描前,需要先向項(xiàng)目中導(dǎo)入Spring AOP的JAR包spring-aop-4.3.6.RELEASE.jar,否則程序在運(yùn)行時(shí)會(huì)報(bào)出“java.lang.NoClassDefFound Error:org/springframework/aop/TargetSource”錯(cuò)誤。

(7)在com.itheima.annotation包中,創(chuàng)建測試類AnnotationAssembleTest,在類中編寫測試方法并定義配置文件的路徑,然后通過Spring容器加載配置文件并獲取UserController實(shí)例,最后調(diào)用實(shí)例中的save()方法,如文件2-20所示。

執(zhí)行程序后,控制臺(tái)的輸出結(jié)果如圖2-8所示。

從圖2-8可以看到,Spring容器已成功獲取了UserController的實(shí)例,并通過調(diào)用實(shí)例中的方法執(zhí)行了各層中的輸出語句,這說明已成功實(shí)現(xiàn)了基于Annotation裝配Bean。

小提示上述案例中如果使用@Resource注解替換注解@Autowired,也可以達(dá)到同樣的效果。

總結(jié)

以上是生活随笔為你收集整理的注解@resource的作用_Bean基于Annotation(注解)的装配方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。