Spring 學習筆記(八) 註解使用整合

2022-03-20 06:53:55 字數 3282 閱讀 6376

需先在配置檔案中,配置乙個org.springframework.beans.factory.annotation. autowiredannotationbeanpostprocessor的bean。

<

bean

class

="org.springframework.beans.factory.annotation.

autowiredannotationbeanpostprocessor"

/>

主要作用與setter/建構函式前:

public

class

boss

@autowired

public

void

setoffice(office office)

…}

public

class

boss

…}

當同乙個class申明了兩個bean時,在裝配時用作區分。

@qualifier只能和@autowired結合使用,是對@autowired有益的補充。一般來講,@qualifier對方法簽名中入參進行注釋會降低**的可讀性,而對成員變數注釋則相對好一些。

例如:office有office和office1兩個bean。

public

class

boss

}

@resource的作用相當於@autowired,只不過@autowired按 bytype 自動注入,面@resource預設按 byname 自動注入罷了。@resource有兩個屬性是比較重要的,分別是 name 和 type,spring 將@resource注釋的 name 屬性解析為 bean 的名字,而 type 屬性則解析為 bean 的型別。所以如果使用 name 屬性,則使用 byname 的自動注入策略,而使用 type 屬性時則使用 bytype 自動注入策略。如果既不指定 name 也不指定 type 屬性,這時將通過反射機制使用 byname 自動注入策略。

resource 注釋類位於 spring 發布包的 lib/j2ee/common-annotations.jar 類包中,因此在使用之前必須將其加入到專案的類庫中。來看乙個使用@resource的例子:

public

class

boss

spring 容器中的 bean 是有生命週期的,spring 允許在 bean 在初始化完成後以及 bean 銷毀前執行特定的操作,您既可以通過實現 initializingbean/disposablebean 介面來定製初始化之後 / 銷毀之前的操作方法,也可以通過 元素的 init-method/destroy-method 屬性指定初始化之後 / 銷毀之前呼叫的操作方法。關於 spring 的生命週期,筆者在《精通 spring 2.x—企業應用開發精解》第 3 章進行了詳細的描述,有興趣的讀者可以查閱。

jsr-250 為初始化之後/銷毀之前方法的指定定義了兩個注釋類,分別是 @postconstruct 和 @predestroy,這兩個注釋只能應用於方法上。標註了 @postconstruct 注釋的方法將在類例項化後呼叫,而標註了 @predestroy 的方法將在類銷毀之前呼叫。

public

class

boss

@predestroy

public

void

predestroy1()

…}

您只需要在方法前標註@postconstruct@predestroy,這些方法就會在 bean 初始化後或銷毀之前被 spring 容器執行了。

我們知道,不管是通過實現initializingbean/disposablebean介面,還是通過 元素的init-method/destroy-method屬性進行配置,都只能為 bean 指定乙個初始化 / 銷毀的方法。但是使用@postconstruct@predestroy注釋卻可以指定多個初始化 / 銷毀方法,那些被標註@postconstruct@predestroy注釋的方法都會在初始化 / 銷毀時被執行。

spring 2.5 在 @repository 的基礎上增加了功能類似的額外三個註解:@component、@service、@constroller,它們分別用於軟體系統的不同層次:

import

org.springframework.stereotype.component;

@component

public

class

car

僅需要在類定義處,使用@component注釋就可以將乙個類定義了 spring 容器中的 bean。

@scope("prototype")

@component("boss")

public

class

boss

這樣,當從 spring 容器中獲取bossbean 時,每次返回的都是新的例項了。

spring 2.5 中除了提供@component注釋外,還定義了幾個擁有特殊語義的注釋,它們分別是:@repository@service@controller。在目前的 spring 版本中,這 3 個注釋和@component是等效的,但是從注釋類的命名上,很容易看出這 3 個注釋分別和持久層、業務層和控制層(web 層)相對應。雖然目前這 3 個注釋和@component相比沒有什麼新意,但 spring 將在以後的版本中為它們新增特殊的功能。所以,如果 web 應用程式採用了經典的三層分層結構的話,最好在持久層、業務層和控制層分別採用@repository@service@controller對分層中的類進行注釋,而用@component對那些比較中立的類進行注釋。

感謝:

spring學習(八 使用註解開發)

在spring4之後,要是用註解開發,必須保證aop的包匯入了 使用註解需要匯入context約束,增加註解的支援!bean component 元件 等價於 component public class user 屬性如何注入 component 元件 等價於 component public c...

課程Spring註解驅動學習筆記(八)AOP

指在程式執行期間動態的將某段 切入到指定方法指定位置進行執行的程式設計方式 1 匯入aop模組 spring aop spring aspects 2 定義乙個業務邏輯類 mathcalculator 在業務邏輯執行的時候將日誌進行列印 方法之前 方法執行結束 方法出現異常,3 定義乙個日誌切面類 ...

Spring學習之八 使用註解開發

在spring4之後,要使用註解開發,必須要保證aop的包匯入,要匯入context約束,增加註解的支援。xmlns xmlns xsi xmlns context xsi schemalocation context annotation config beans 等價於 component pu...