需先在配置檔案中,配置乙個org.springframework.beans.factory.annotation. autowiredannotationbeanpostprocessor的bean。
<
bean
class
="org.springframework.beans.factory.annotation.
autowiredannotationbeanpostprocessor"
/>
主要作用與setter/建構函式前:
publicclass
boss
@autowired
public
void
setoffice(office office)
…}
publicclass
boss
…}
當同乙個class申明了兩個bean時,在裝配時用作區分。
@qualifier
只能和@autowired
結合使用,是對@autowired
有益的補充。一般來講,@qualifier
對方法簽名中入參進行注釋會降低**的可讀性,而對成員變數注釋則相對好一些。
例如:office有office和office1兩個bean。
publicclass
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
的例子:
publicclass
boss
spring 容器中的 bean 是有生命週期的,spring 允許在 bean 在初始化完成後以及 bean 銷毀前執行特定的操作,您既可以通過實現 initializingbean/disposablebean 介面來定製初始化之後 / 銷毀之前的操作方法,也可以通過 元素的 init-method/destroy-method 屬性指定初始化之後 / 銷毀之前呼叫的操作方法。關於 spring 的生命週期,筆者在《精通 spring 2.x—企業應用開發精解》第 3 章進行了詳細的描述,有興趣的讀者可以查閱。
jsr-250 為初始化之後/銷毀之前方法的指定定義了兩個注釋類,分別是 @postconstruct 和 @predestroy,這兩個注釋只能應用於方法上。標註了 @postconstruct 注釋的方法將在類例項化後呼叫,而標註了 @predestroy 的方法將在類銷毀之前呼叫。
publicclass
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,它們分別用於軟體系統的不同層次:
importorg.springframework.stereotype.component;
@component
public
class
car
僅需要在類定義處,使用@component
注釋就可以將乙個類定義了 spring 容器中的 bean。
@scope("prototype")@component("boss")
public
class
boss
這樣,當從 spring 容器中獲取boss
bean 時,每次返回的都是新的例項了。
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...