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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

在Spring中,盡管使用XML配置文件可以實現Bean的裝配工作,但如果應用中有很多Bean時,會導致XML配置文件過于臃腫,給后續的維護和升級工作帶來一定的困難。為此,Spring提供了對Annotation(注解)技術的全面支持。

Spring中定義了一系列的注解,常用的注解如下所示?!?/p>

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

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

@Service:通常作用在業務層(Service層),用于將業務層的類標識為Spring中的Bean,其功能與@Component相同。

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

@Autowired:用于對Bean的屬性變量、屬性的setter方法及構造方法進行標注,配合對應的注解處理器完成Bean的自動配置工作。默認按照Bean的類型進行裝配。

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

@Qualifier:與@Autowired注解配合使用,會將默認的按Bean類型裝配修改為按Bean的實例名稱裝配,Bean的實例名稱由@Qualifier注解的參數指定。

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

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

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

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

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

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

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

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

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

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

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

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

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

注意Spring 4.0以上版本使用上面的代碼對指定包中的注解進行掃描前,需要先向項目中導入Spring AOP的JAR包spring-aop-4.3.6.RELEASE.jar,否則程序在運行時會報出“java.lang.NoClassDefFound Error:org/springframework/aop/TargetSource”錯誤。

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

執行程序后,控制臺的輸出結果如圖2-8所示。

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。