javascript
Spring基于Annotation装配Bean
在 Spring 中,盡管使用 XML 配置文件可以實現 Bean 的裝配工作,但如果應用中 Bean 的數量較多,會導致 XML 配置文件過于臃腫,從而給維護和升級帶來一定的困難。
Java 從 JDK 5.0 以后,提供了 Annotation(注解)功能,Spring 也提供了對 Annotation 技術的全面支持。Spring3 中定義了一系列的 Annotation(注解),常用的注解如下。
1 @Component
可以使用此注解描述 Spring 中的 Bean,但它是一個泛化的概念,僅僅表示一個組件(Bean),并且可以作用在任何層次。使用時只需將該注解標注在相應類上即可。
2 @Repository
用于將數據訪問層(DAO層)的類標識為 Spring 中的 Bean,其功能與 @Component 相同。
3 @Service
通常作用在業務層(Service 層),用于將業務層的類標識為 Spring 中的 Bean,其功能與 @Component 相同。
4 @Controller
通常作用在控制層(如 Struts2 的 Action),用于將控制層的類標識為 Spring 中的 Bean,其功能與 @Component 相同。
5 @Autowired
用于對 Bean 的屬性變量、屬性的 Set 方法及構造函數進行標注,配合對應的注解處理器完成 Bean 的自動配置工作。默認按照 Bean 的類型進行裝配。
6 @Resource
其作用與 Autowired 一樣。其區別在于 @Autowired 默認按照 Bean 類型裝配,而 @Resource 默認按照 Bean 實例名稱進行裝配。
@Resource 中有兩個重要屬性:name 和 type。
Spring 將 name 屬性解析為 Bean 實例名稱,type 屬性解析為 Bean 實例類型。如果指定 name 屬性,則按實例名稱進行裝配;如果指定 type 屬性,則按 Bean 類型進行裝配。
如果都不指定,則先按 Bean 實例名稱裝配,如果不能匹配,則再按照 Bean 類型進行裝配;如果都無法匹配,則拋出 NoSuchBeanDefinitionException 異常。
7 @Qualifier
與 @Autowired 注解配合使用,會將默認的按 Bean 類型裝配修改為按 Bean 的實例名稱裝配,Bean 的實例名稱由 @Qualifier 注解的參數指定。
1. 創建 DAO 層接口
在 src 目錄下創建一個名為 com.zsh 的包,在該包下創建一個名為 PersonDao 的接口,并添加一個 add() 方法,如下所示。
2. 創建 DAO 層接口的實現類
在 com.zsh 包下創建 PersonDao 接口的實現類 PersonDaoImpl,編輯后如下所示。
上述代碼中,首先使用 @Repository 注解將 PersonDaoImpl 類標識為 Spring 中的 Bean,其寫法相當于配置文件中 <bean id="personDao"class=“com.zsh.PersonDaoImpl”/> 的書寫。然后在 add() 方法中輸出一句話,用于驗證是否成功調用了該方法。
3. 創建 Service 層接口
在 com.zsh包下創建一個名為 PersonService 的接口,并添加一個 add() 方法,如下所示。
4. 創建 Service 層接口的實現類
在 com.zsh 包下創建 PersonService 接口的實現類 PersonServiceImpl,編輯后如下所示。
上述代碼中,首先使用 @Service 注解將 PersonServiceImpl 類標識為 Spring 中的 Bean,其寫法相當于配置文件中 <bean id="personService"class=“com.zsh.PersonServiceImpl”/> 的書寫。
然后使用 @Resource 注解標注在屬性 personDao 上(也可標注在 personDao 的 setPersonDao() 方法上),這相當于配置文件中 <property name="personDao"ref=“personDao”/> 的寫法。最后在該類的 add() 方法中調用 personDao 中的 add() 方法,并輸出一句話。
5. 創建 Action
在 com.zsh 包下創建一個名為 PersonAction 的類,編輯后如下所示。
上述代碼中,首先使用 @Controller 注解標注 PersonAction 類,其寫法相當于在配置文件中編寫 <bean id="personAction"class=“com.zsh.PersonAction”/>。
然后使用了 @Resource 注解標注在 personService 上,這相當于在配置文件內編寫 <property name="personService"ref=“personService”/>。
最后在其 add() 方法中調用了 personService 中的 add() 方法,并輸出一句話。
6. 創建 Spring 配置文件
在 com.zsh 包下創建一個名為 applicationContext.xml 的配置文件,如下所示。
與之前的配置文件相比,上述代碼的元素中增加了第 7 行、第 15 行和第 16 行中包含有 context 的代碼,然后在第 18 行代碼中,使用 context 命名空間的 component-scan 元素進行注解的掃描,其 base-package 屬性用于通知 spring 所需要掃描的目錄。
7. 創建測試類
在 com.zsh 包下創建一個名為 AnnotationTest 的測試類,編輯后如下所示。
上述代碼中,首先通過加載配置文件并獲取 personAction 的實例,然后調用該實例的 add() 方法。
8. 運行程序并查看結果
使用 JUnit 測試運行 test() 方法,運行成功后,輸出如下。
從輸出結果中可以看出,DAO 層、Service 層和 Action 層的 add() 方法都成功輸出了結果。由此可知,使用 Annotation 裝配 Bean 的方式已經成功實現了。
總結
以上是生活随笔為你收集整理的Spring基于Annotation装配Bean的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 对查询结果进行排序
- 下一篇: Java 字符串性能对比