Spring常用註解

2021-09-29 15:09:41 字數 3981 閱讀 4851

spring中常用註解的介紹

spring中使用註解時配置檔案的寫法:

<?xml version="1.0" encoding="utf-8"?>

@autowired 根據bean 型別從spring 上線文中進行查詢,註冊型別必須唯一,否則報異常。與 @resource 的區別在於,@resource 允許通過bean 名稱或bean 型別兩種方式進行查詢 @autowired(required=false) 表示,如果spring 上下文中沒有找到該型別的bean 時, 才會使用new softpmserviceimpl();

@autowired 標註作用於 map 型別時,如果 map 的 key 為 string 型別,則 spring 會將容器中所有型別符合 map 的 value 對應的型別的 bean 增加進來,用 bean 的 id 或 name 作為 map 的 key。

這裡簡單介紹下什麼是按型別進行裝配,什麼是按名稱進行裝配?

所謂按型別,就是當spring容器中存在乙個與指定屬性型別相同的bean,那麼將該屬性進行自動裝配;如果存在多個該型別的bean,那麼跑出異常,並指出不能使用按型別進行自動裝配;如果沒有找到匹配的bean,則什麼事都不發生。

所謂按名稱,即根據屬性名進行自動裝配,此項會檢查spring容器中與該屬性名完全一致的的bean,進行自動裝配。

@qualifier

@autowired

@qualifier(「softservice」)

private isoftpmservice softpmservice;

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

@component

@component(「reportaction」)

@scope(「request」)

public class reportaction extends abstractbaseaction

下面的解釋來自官方文件

@repository、@service和 @controller。

@component是所有受spring管理元件的通用形式;

而 @repository、@service和 @controller則是 @component的細化, 用來表示更具體的用例(例如,分別對應了持久化層、服務層和表現層)。 也就是說, 你能用 @component來註解你的元件類,

但如果用 @repository、@service 或 @controller來註解它們,你的類也許能更好地被工具處理,或與切面進行關聯。

例如,這些典型化註解可以成為理想的切入點目標。當然,在spring framework以後的版本中,@repository、@service和 @controller也許還能攜帶更多語義。如此一來,如果你正在考慮服務層中是該用 @component還是 @service,

那 @service顯然是更好的選擇。同樣的,就像前面說的那樣,@repository已經能在持久化層中進行異常轉換時被作為標記使用了。

@controller

@service

@service

public class softcreateserviceimpl implements isoftcreateservice {}

//或者

@service(「softcreateserviceimpl」)

@service 負責註冊乙個bean 到spring 上下文中,bean 的id 預設為類名稱開頭字母小寫

@repository

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

引數繫結說明

如果我們使用以下的 url 請求:

topicid url引數將繫結到 topicid入參上,而userid和 username url引數將繫結到user物件的userid和username屬性中。和url請求中不允許沒有topicid引數不同,雖然user的userid屬性的型別是基本資料型別,但如果url中不存在userid引數,spring也不會報錯,此時user.userid值為0 。如果user物件擁有乙個dept.deptid 的級聯屬性,那麼它將和dept.deptid url引數繫結。

@scope

@scope(「session」)

@repository()

public class usersessionbean implementsserializable {}

在使用xml定義bean時,可以通過bean的scope屬性來定義乙個bean的作用範圍,同樣可以通過 @scope註解來完成。

@scope中可以指定如下值:

singleton:定義bean的範圍為每個spring容器乙個例項(預設值)

prototype:定義bean可以被多次例項化(使用一次就建立一次)

request: 定義bean的範圍是http請求(springmvc中有效)

session: 定義bean的範圍是http會話(springmvc中有效)

global-session:定義bean的範圍是全域性http會話(portlet中有效)

@sessionattributes

@sessionattributes(「curruser」) // 將modelmap 中屬性名為curruser 的屬性

@sessionattributes()

@sessionattributes(types = user.class)

@sessionattributes(types = )

@sessionattributes(types = ,value=)

spring 允許我們有選擇地指定 modelmap 中的哪些屬性需要轉存到 session 中,

以便下乙個請求屬對應的 modelmap 的屬性列表中還能訪問到這些屬性。

這一功能是通過類定義處標註 @sessionattributes 註解來實現的。

@sessionattributes 只能宣告在類上,而不能宣告在方法上。

}我們在 @2處新增了乙個 modelmap 屬性,其屬性名為 curruser,而 @1處通過 @sessionattributes 註解將 modelmap 中名為 curruser 的屬性放置到 session 中,所以我們不但可以在 listboardtopic() 請求所對應的 jsp 檢視頁面中通過 request.getattribute(「curruser」) 和 session.getattribute(「curruser」) 獲取 user 物件,還可以在下乙個請求所對應的 jsp 檢視頁面中通過 session.getattribute(「curruser」) 或 modelmap#get(「curruser」) 訪問到這個屬性。

@required

@required

public setname (string name) {}

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

@postconstruct

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

@predestroy

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

Spring常用註解

spring常用註解 1 引入context命名空間 在spring的配置檔案中 配置檔案如下 xml xmlns context spring context 2.5.xsd 開啟配置 spring 會自動掃瞄cn.pic包下面有註解的類,完成bean的裝配。xml xmlversion 1.0 ...

Spring常用註解

在spring中常用的註解 autowired註解 不推薦使用,建議使用 resource autowired可以對成員變數 方法和建構函式進行標註,來完成自動裝配的工作。autowired的標註位置不同,它們都會在spring在初始化這個bean時,自動裝配這個屬性。要使 autowired能夠工...

spring常用註解

1 引入context命名空間 在spring的配置檔案中 配置檔案如下 xml 收藏 xmlns context spring context 2.5.xsd 開啟配置 spring 會自動掃瞄cn.pic包下面有註解的類,完成bean的裝配。xml xmlns xmlns xsi xmlns c...