對于DI使用注解,将不再需要在Spring配置檔案中聲明Bean執行個體。Spring中使用注解,需要在原有Spring運作環境基礎上再做一些改變,完成以下三個步驟。
(1)導入AOP的Jar包。因為注解的背景實作用到了AOP程式設計。
(2)需要更換配置檔案頭,即添加相應的限制。
(3)需要在Spring配置檔案中配置元件掃描器,用于在指定的基本包中掃描注解。

1、定義[email protected]
需要在類上使用注解@Component,該注解的value屬性用于指定該bean的id值。
舉例:di01
另外,Spring還提供了3個功能基本和@Component等效的注解:
@Repository 用于對DAO實作類進行注解
@Service 用于對Service實作類進行注解
@Controller 用于對Controller實作類進行注解
之是以建立這三個功能與@Component等效的注解,是為了以後對其進行功能上的擴充,使它們不再等效。
2、Bean的作用域@Scope
需要在類上使用注解@Scope,其value屬性用于指定作用域。預設為singleton。
舉例:di01
3、基本類型屬性注入@Value
需要在屬性上使用注解@Value,該注解的value屬性用于指定要注入的值。
使用該注解完成屬性注入時,類中無需setter。當然,若屬性有setter,則也可将其加到setter上。
4、按類型注入域屬性@Autowired,@Autowired是spring的注解
需要在域屬性上使用注解@Autowired,該注解預設使用按類型自動裝配Bean的方式。
使用該注解完成屬性注入時,類中無需setter。當然,若屬性有setter,則也可将其加到setter上。
5、按名稱注入域屬性@Autowired與@Qualifier
需要在域屬性上聯合使用注解@Autowired與@Qualifier。@Qualifier的value屬性用于指定要比對的Bean的id值。同樣類中無需setter,也可加到setter上。
@Autowired還有一個屬性required,預設值為true,表示當比對失敗後,會終止程式運作。若将其值設定為false,則比對失敗,将被忽略,未比對的屬性值為null。
6、域屬性注解@Resource,也就是說@Resource是java自帶的注解
Spring提供了對JSR-250規範中定義@Resource标準注解的支援。@Resource注解既可以按名稱比對Bean,也可以按類型比對Bean。使用該注解,要求JDK必須是6及以上版本。
(1)按類型注入域屬性
@Resource注解若不帶任何參數,則會按照類型進行Bean的比對注入。
舉例:di04
(2)按名稱注入域屬性
@Resource注解指定其name屬性,則name的值即為按照名稱進行比對的Bean的id。
舉例:di05
7、Bean的生命始末@PostConstruct與@PreDestroy
在方法上使用@PostConstruct,與原來的init-method等效。在方法上使用@PreDestroy,與destroy-method等效。
8、使用JavaConfig進行配置(替代的是applicationContext.xml)
JavaConfig,是在Spring 3.0開始從一個獨立的項目并入到Spring中的。JavaConfig可以看成一個用于完成Bean裝配的配置檔案,隻不過是程式員使用Java自己編寫的。
舉例:di06包
9.使用junit4測試Spring
建立一個普通POJO類作為測試類。
需要在三個位置添加注解。
在類頭添加兩個注解:
@RunWith(SpringJUnit4ClassRunner.class):用于指定運作環境
@ContextConfiguration(locations=“”):用于指定配置檔案位置
将要測試的對象聲明為成員變量,并在其頭上添加注解。
在測試方法頭上添加注解。
總結:注解與XML共同使用注解的好處是,配置友善,直覺。但其弊端也顯而易見:以寫死的方式寫入到了Java代碼中,其修改是需要重新編譯代碼的。
XML配置方式的最大好處是,對其所做修改,無需編譯代碼,隻需重新開機伺服器即可将新的配置加載。
若注解與XML同用,XML的優先級要高于注解。這樣做的好處是,需要對某個Bean做修改,隻需修改配置檔案即可。當然,此時,Bean類要有setter或構造器。