1. 程式人生 > >常用註解的作用

常用註解的作用

一.註解:

註解分為兩類,一種是使用bean的(@Autowired , @Resource),一種是註冊bean的(@Component , @Repository , @ Controller , @Service , @Configration

[email protected]註解

@Bean 標識一個用於配置和初始化一個由SpringIoc容器管理的新物件的方法,類似於XML配置檔案的<bean/>,一般與@Configration註解配合使用

註冊bean

2.@Service註解

首先,在配置root-config.xml檔案中加一行:

加上這一行以後,將自動掃描路徑下面的包,如果一個類帶了@Service註解,將自動註冊到Spring容器,不需要再在applicationContext.xml檔案定義bean了

類似作用的還包括@Component、@Repository、@Controller

3.@Component註解

把普通pojo例項化到spring容器中,相當於配置檔案中的 <bean id="" class=""/>泛指各種元件,就是說當我們的類不屬於各種歸類的時候(不屬於@Controller、@Services等的時候),我們就可以使用@Component來標註這個類

4.@Repository註解

用於標註資料訪問元件,即DAO元件,再稍微大點的專案裡,使用xml的bean定義來配置會大大增加程式碼體積且不易維護,所以引入了自動掃描的機制,它的作用和在xml檔案

中使用bean節點配置元件時一樣的。

5.@Controller註解

當元件屬於控制層時,則使用@Controller註解

被Controller標記的類就是一個控制器,這個類中的方法,就是相應的動作

  1. @Configration註解

@Configuration用於定義配置類,可替換xml配置檔案,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器

需要注意的是:

@Configuration不可以是final型別;

@Configuration不可以是匿名類;

巢狀的configuration必須是靜態類。

Bean註解主要用於方法上,有點類似於工廠方法,當使用了@Bean註解,我們可以連續使用多種定義bean時用到的註解,譬如用@Qualifier註解定義工廠方法的名稱,用@Scope註解定義該bean的作用域範圍,譬如是singleton還是prototype等。

使用bean

7.@Autowired 註解

它可以對類成員變數、方法及建構函式進行標註,完成自動裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。

@Autowired註解可用於為類的屬性、構造器、方法進行注值。預設情況下,其依賴的物件必須存在(bean可用)如果容器中包含多個同一型別的Bean,那麼啟動容器時會報找不到指定型別bean的異常,解決辦法是結合@Qualifier註解進行限定,指定注入的bean名稱

8.@Resource註解

@Resource和@Autowired註解都是用來實現依賴注入的。只是@Autowired按byType自動注入,而@Resource預設按 byName自動注入

@Resource依賴注入時查詢bean的規則

  1. 既不指定name屬性,也不指定type屬性,則自動按byName方式進行查詢。如果沒有找到符合的bean,則回退為一個原始型別進行進行查詢,如果找到就注入。 
  2. 只是指定了@Resource註解的name,則按name後的名字去bean元素裡查詢有與之相等的name屬性的bean。
  3. 只指定@Resource註解的type屬性,則從上下文中找到型別匹配的唯一bean進行裝配,找不到或者找到多個,都會丟擲異常 
  4. 既指定了@Resource的name屬性又指定了type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則丟擲異常

除此之外還有很多註解

9.@Override註解

標示當前的方法定義將覆蓋超類中的方法他告訴我們同時也告訴編譯器我們的這些方法肯定覆蓋了類**裡面的方法,如果註釋掉類**裡面的方法 那麼就會報錯,它需要全部覆蓋某個介面的方法。

10.@ComponentScan註解

@ComponentScan告訴Spring 哪個packages 的用註解標識的類 會被spring自動掃描並且裝入bean容器。

例如,如果你有個類用@Controller註解標識了,那麼,如果不加上@ComponentScan,自動掃描該controller,那麼該Controller就不會被spring掃描到,更不會裝入spring容器中,因此你配置的這個Controller也沒有意義。

11.@PropertySouce註解

通過@PropertySource註解將properties配置檔案中的值儲存到Spring的 Environment中,Environment介面提供方法去讀取配置檔案中的值,引數是properties檔案中定義的key值。

12.@ImportResource註解和@Import註解

@Import註解是引入帶有@Configuration的java類。

@ImportResource是引入spring配置檔案.xml

13.@RequestMapping

是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

14.@responseBody註解

@responseBody註解的作用是將controller的方法返回的物件通過適當的轉換器轉換為指定的格式之後,寫入到response物件的body區,通常用來返回JSON資料或者是XML資料