1. 程式人生 > >最全Spring常用註解詳解

最全Spring常用註解詳解

我們在開發的時候,會看到各種的註解,如果不細細研究下,傻傻的分不清楚,更談不上怎麼合理的利用了,接下來我們一起看下。
研究順序,從最常用的來,follow me

[email protected]註解
用於標註控制層元件(如struts中的action)。
如果@Controller不指定其value【@Controller】,則預設的bean名字為這個類的類名首字母小寫,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,則使用value作為bean的名字。

[email protected]


預設按照byName方式進行bean匹配,當找不到與名稱匹配的bean才會按型別裝配,由J2EE提供,需要匯入包javax.annotation.Resource,@Resource的作用相當於@Autowired,只不過@Autowired按照byType自動注入。
(1)、@Resource後面沒有任何內容,預設通過name屬性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type則根據指定的型別去匹配bean
(3)、指定了name和type則根據指定的name和type去匹配bean,任何一個不匹配都將報錯

[email protected]註解
用於標註業務層元件。
@Service(“userService”)註解是告訴Spring,當Spring要建立UserServiceImpl的的例項時,bean的名字必須叫做”userService”,這樣當Action需要使用UserServiceImpl的的例項時,就可以由Spring建立好的”userService”,然後注入給Action:在Action只需要宣告一個名字叫“userService”的變數來接收由Spring注入的”userService”即可。

[email protected]註解
@Autowired顧名思義,就是自動裝配,其作用是為了消除程式碼Java程式碼裡面的getter/setter與bean屬性中的property。當然,getter看個人需求,如果私有屬性需要對外提供的話,應當予以保留。 
@Autowired預設按型別(byType)匹配的方式,在容器查詢匹配的Bean,當有且僅有一個匹配的Bean時,Spring將其注入@Autowired標註的變數中,如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。

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

[email protected]註解
主要用於在SpringMVC後臺控制層獲取引數,類似一種是request.getParameter("name"),它有三個常用引數:defaultValue = "0", required = false, value = "isApp";defaultValue 表示設定預設值,required 銅過boolean設定是否是必須要傳入的引數,value 值表示接受的傳入的引數型別。
(1)、常用來處理簡單型別的繫結,通過Request.getParameter() 獲取的String可直接轉換為簡單型別的情況( String–> 簡單型別的轉換操作由ConversionService配置的轉換器來完成);因為使用request.getParameter()方式獲取引數,所以可以處理get 方式中queryString的值,也可以處理post方式中 body data的值;
(2)、用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容,提交方式GET、POST
(3)、該註解有兩個屬性: value、required; value用來指定要傳入值的id名稱,required用來指示引數是否必須繫結;

[email protected]註解
該註解常用來處理Content-Type: 不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等;
它是通過使用HandlerAdapter 配置的HttpMessageConverters來解析post data body,然後繫結到相應的bean上的。

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

[email protected]註解
泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。
是所有受Spring 管理元件的通用形式,@Component註解可以放在類的頭上,@Component不推薦使用。
@Component、@Repository、@Service、@Controller實質上屬於同一類註解,用法相同,功能相同,區別在於標識元件的型別。@Component可以代替@Repository、@Service、@Controller,因為這三個註解是被@Component標註的。程式碼如下

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    String value() default "";
}

[email protected]註解
把一個類作為一個IoC容器,它的某個方法頭上如果註冊了@Bean,就會作為這個Spring容器中的Bean。
@Configuration用於定義配置類,可替換xml配置檔案,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。
需要注意的是:
(1)、@Configuration不可以是final型別;
(2)、@Configuration不可以是匿名類;
(3)、巢狀的configuration必須是靜態類。
Bean註解主要用於方法上,有點類似於工廠方法,當使用了@Bean註解,我們可以連續使用多種定義bean時用到的註解,譬如用@Qualifier註解定義工廠方法的名稱,用@Scope註解定義該bean的作用域範圍,譬如是singleton還是prototype等。


[email protected]註解
@Bean是一個方法級別上的註解,主要用在@Configuration註解的類裡,也可以用在@Component註解的類裡。新增的bean的id為方法名。
@Bean 用在方法上,告訴Spring容器,你可以從下面這個方法中拿到一個Bean。

[email protected]註解
用於標註資料訪問元件,即DAO元件,@Repository(value=”userDao”)註解是告訴Spring,讓Spring建立一個名字叫“userDao”的UserDaoImpl例項。

[email protected]註解
宣告這service所有方法都需要事務管理。每一個業務方法開始時都會開啟一個事務。

[email protected]註解
如果容器中有一個以上匹配的Bean,則可以通過@Qualifier註解限定Bean的名稱。

[email protected]註解
表示當前方法覆蓋了父類的方法。

[email protected]註解
表示方法已經過時,是不被建議使用的,方法上有橫線,使用時會有警告。

[email protected]註解
表示關閉一些警告資訊(通知java編譯器忽略特定的編譯警告)。

[email protected]註解
指定scope作用域的(用在類上),@Scope("prototype")表示將Action的範圍宣告為原型,可以利用容器的scope="prototype"來保證每一個請求有一個單獨的Action來處理,避免struts中Action的執行緒安全問題。spring 預設scope 是單例模式(scope="singleton"),這樣只會建立一個Action物件,每次訪問都是同一Action物件,資料不安全,struts2 是要求每次次訪問都對應不同的Action,scope="prototype" 可以保證當有請求的時候都建立一個Action物件。

[email protected](true)註解
表示延遲初始化。

補充:
(1)、@PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作。

(2)、被註解的java類當做Bean例項,Bean例項的名稱預設是Bean類的首字母小寫,其他部分不變

(3)、儘量使用對應元件註解的類替換@Component註解,在spring未來的版本中,@Controller,@Service,@Repository會攜帶更多語義

參考:
各位大俠高見以及自己的拙見