Spring 註解詳解

2021-07-14 14:04:07 字數 4792 閱讀 7304

使用註解來構造ioc容器

在base-package指明乙個包

表明com.om包及其子包中,如果某個類的頭上帶有特定的註解【@component/@repository/@service/@controller】,就會將這個物件作為bean註冊進spring容器。

1:@component

@component是所有受spring 管理元件的通用形式,@component註解可以放在類的頭上,@component不推薦使用。

2:@controller

@controller對應表現層的bean,也就是action,例如:

@controller

@scope("prototype")

public class usercontroller

注:實際上,使用@component,也可以起到@controller同樣的作用。

使用@controller註解標識usercontroller之後,就表示要把usercontroller交給spring容器管理,在spring容器中會存在乙個名字為"usercontroller"的action,這個名字是根據usercontroller類名來取的。注意:如果@controller不指定其value【@controller】,則預設的bean名字為這個類的類名首字母小寫,如果指定value【@controller(value="usercontroller")】或者【@controller("usercontroller")】,則使用value作為bean的名字。

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

@controller

public class usercontroller

}

4:@autowired

將 @autowired 注釋標註在成員變數上 ,它可以對類成員變數、方法及建構函式進行標註,完成自動裝配的工作。

@controller

public class usercontroller

5:@requestparam

@requestparam將請求的引數繫結到方法中的引數上。其實,即使不配置該引數,註解也會預設使用該引數。如果想自定義指定引數的話,如果將@requestparam的 required 屬性設定為false(如@requestparam(value="id",required=false))。

6:@requestbody

@requestbody是指方法引數應該被繫結到http請求body上。

public void userinfo(@requestbody string userid,user user)

7:@responsebody

@responsebody與@requestbody類似,它的作用是將返回型別直接輸入到http response body中。最常用的我們使用ajax傳輸json,需要再類上面配置@responsebody。

@responsebody

public string list()

8:@modelattribute

@modelattribute

public user adduser(@requestparam string userid)

@modelattribute方法用來在model中填充屬性,如填充下拉列表、寵物型別或檢索乙個命令物件比如賬戶(用來在html表單上呈現資料)。

@modelattribute方法有兩種風格:一種是新增**屬性並返回它。另一種是該方法接受乙個模型並新增任意數量的模型屬性。使用者可以根據自己的需要選擇對應的風格。

@modelattribute作用在方法引數上

當@modelattribute作用在方法引數上時,表明該引數可以在方法模型中檢索到。如果該引數不在當前模型中,該引數先被例項化然後新增到模型中。一旦模型中有了該引數,該引數的字段應該填充所有請求引數匹配的名稱中。這是spring mvc中重要的資料繫結機制,它省去了單獨解析每個表單字段的時間。

@modelattribute是一種很常見的從資料庫中檢索屬性的方法,它通過@sessionattributes使用request請求儲存。在一些情況下,可以很方便的通過uri模板變數和型別轉換器檢索屬性。

9:@cacheable 和@cacheflush

@cacheable :宣告乙個方法的返回值應該被緩 存  

例如:@cacheable(modelid = "testcaching")  

@cacheflush :宣告乙個方法是清空快取的觸發器                   

例如:@cacheflush(modelid = "testcaching") 

10:@resource

11:@postconstruct 和@predestroy

@postconstruct 在方法上加上註解@postconstruct ,這個方法就會在bean 初始化之後被spring 容器執行  (注:bean 初始化包括,例項化bean ,並裝配bean 的屬性(依賴注入))。

@predestroy 在方法上加上註解@predestroy ,這個方法就會在bean 被銷毀前被spring 容器執行。

12:@repository

與@controller 、@service 類似,都是向spring 上下文中註冊bean。

13:@sessionattributes

spring 允許我們有選擇地指定 modelmap 中的哪些屬性需要轉存到 session 中, 以便下乙個請求屬對應的 modelmap 的屬性列表中還能訪問到這些屬性。 這一功能是通過類定義處標註 @sessionattributes 註解來實現的。 @sessionattributes 只能宣告在類上,而不能宣告在方法上。    

例如   

@sessionattributes("user") // 將modelmap 中屬性名為user的屬性 

@sessionattributes() 

@sessionattributes(types = user.class)   

@sessionattributes(types = )   

@sessionattributes(types = ,value=) 

14:@initbinder

如果希望某個屬性編輯器僅作用於特定的 controller ,可以在 controller 中定義乙個標註 @initbinder 註解的方法, 可以在該方法中向 controller 了註冊若干個屬性編輯器 

@initbinder  

public void initbinder(webdatabinder binder)

15:@required

@ required 負責檢查乙個bean在初始化時其宣告的 set方法是否被執行, 當某個被標註了 @required 的 setter 方法沒有被呼叫,則 spring 在解析的時候會丟擲異常,以提醒開發者對相應屬性進行設定。 @required 註解只能標註在 setter 方法之上。因為依賴注入的本質是檢查 setter 方法是否被呼叫了,而不是真的去檢查屬性是否賦值了以及賦了什麼樣的值。如果將該註解標註在非 set***x() 型別的方法則被忽略。

16:@qualifier

@autowired                     @qualifier("softservice")

private isoftpmservice softpmservice; 

使用@autowired 時,如果找到多個同一型別的bean,則會拋異常,此時可以使用 @qualifier("beanname"),明確指定bean的名稱進行注入,此時與 @resource指定name屬性作用相同。

17:@pathvariable

public string getuser(@pathvariable("userid") string userid)

Spring 註解詳解

當我們的專案越來越複雜時 配置檔案也會變得複雜 這樣不僅影響開發效率 還影響錯誤查詢 因此 spring 提供了註解方式開配置bean 使用註解需要準備工作 1.匯入 spring架包 2.引入約束檔案 context檔案 3.開啟掃瞄註解 常用註解 component 給user類加上該註解就等同...

Spring 註解詳解

概述 注釋配置相對於 xml 配置具有很多的優勢 因此在很多情況下,注釋配置比 xml 配置更受歡迎,注釋配置有進一步流行的趨勢。spring 2.5 的一大增強就是引入了很多注釋類,現在您已經可以使用注釋配置完成大部分 xml 配置的功能。在這篇文章裡,我們將向您講述使用注釋進行 bean 定義和...

spring的註解詳解

entity 標記實體類 repository 用於標註資料訪問元件,即dao元件 service用於標註業務層元件 controller用於標註控制層元件 component泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。autowired 自動注入 beforeclass註解的方法...