注解@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(注解)的装配方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 漂泊他乡的意思 漂泊他乡的解释
- 下一篇: weex安装环境_WEEX跨平台开发环境