spring中的 Configration詳解

2021-07-14 13:48:29 字數 2616 閱讀 9085

@configuration 

public class bookstoredaoconfig 

@bean 

public bookdao bookdao() 

} spring 在解析到以上檔案時,將識別出標註 @bean 的所有方法,執行之,並將方法的返回值 ( 這裡是 userdaoimpl 和 bookdaoimpl 物件 ) 註冊到 ioc 容器中。預設情況下,bean 的名字即為方法名。因此,與以上配置等價的 xml 配置如下:

@bean 具有以下四個屬性: 

name -- 指定乙個或者多個 bean 的名字。這等價於 xml 配置中 的 name 屬性。initmethod -- 容器在初始化完 bean 之後,會呼叫該屬性指定的方法。這等價於 xml 配置中 的 init-method 屬性。destroymethod -- 該屬性與 initmethod 功能相似,在容器銷毀 bean 之前,會呼叫該屬性指定的方法。這等價於 xml 配置中 的 destroy-method 屬性。autowire -- 指定 bean 屬性的自動裝配策略,取值是 autowire 型別的三個靜態屬性。autowire.by_name,autowire.by_type,autowire.no。與 xml 配置中的 autowire 屬性的取值相比,這裡少了 constructor,這是因為 constructor 在這裡已經沒有意義了。@bean 沒有直接提供指定作用域的屬性,可以通過 @scope 來實現該功能,關於 @scope 的用法已在上文列舉。 

@target() 

@retention(retentionpolicy.runtime) 

@documented 

@component 

public @inte***ce configuration  

@configuration 

@import() 

public class bookstoreconfig 

混合使用 xml 與註解進行 bean 的配置 

設計 @configuration 和 @bean 的初衷,並不是為了完全取代 xml,而是為了在 xml 之外多一種可行的選擇。由於 spring 自發布以來,spring 開發小組便不斷簡化 xml 配置,使得 xml 配置方式已經非常成熟,加上 spring 2.0 以後出現了一系列命名空間的支援,使得 xml 配置方式成為了使用簡單、功能強大的 bean 定義方式。而且,xml 配置的一些高階功能目前還沒有相關註解能夠直接支援。因此,在目前的多數專案中,要麼使用純粹的 xml 配置方式進行 bean 的配置,要麼使用以註解為主,xml 為輔的配置方式進行 bean 的配置。 

之所以會出現兩者共存的情況,主要歸結為三個原因:其一,目前絕大多數採用 spring 進行開發的專案,幾乎都是基於 xml 配置方式的,spring 在引入註解的同時,必須保證註解能夠與 xml 和諧共存,這是前提;其二,由於註解引入較晚,因此功能也沒有發展多年的 xml 強大,因此,對於複雜的配置,註解還很難獨當一面,在一段時間內仍然需要 xml 的配合才能解決問題。除此之外,spring 的 bean 的配置方式與 spring 核心模組之間是解耦的,因此,改變配置方式對 spring 的框架自身是透明的。spring 可以通過使用 bean 後處理器 (beanpostprocessor) 非常方便的增加對於註解的支援。這在技術實現上非常容易的事情。 

要使用混合配置方式,首先需要判斷以哪一種配置方式為主。對這個問題的不同回答將會直接影響到實現的方式。然而大可不必為此傷腦筋,因為不論是以 xml 為主,還是以註解為主,配置方式都是簡單而且容易理解的。這裡不存在錯誤的決定,因為僅僅是表現方式不一樣。我們首先假設以 xml 配置為主的情況。 

對於已經存在的大型專案,可能初期是以 xml 進行 bean 配置的,後續逐漸加入了註解的支援,這時我們只需在 xml 配置檔案中將被 @configuration 標註的類定義為普通的 ,同時註冊處理註解的 bean 後處理器即可。示例如下: 

// 假設存在如下的 @configuration 類: 

package bookstore.config; 

import bookstore.dao.*; 

@configuration 

public class myconfig 

} 此時,只需在 xml 中作如下宣告即可: 

…… 對於以上的方式,如果存在多個標註了 @configuration 的類,則需要在 xml 檔案中逐一列出。另一種方式是使用前面提到的自動掃瞄功能,配置如下: 

如此,spring 將掃瞄所有 demo.config 包及其子包中的類,識別所有標記了 @component、@controller、@service、@repository 註解的類,由於 @configuration 註解本身也用 @component 標註了,spring 將能夠識別出 @configuration 標註類並正確解析之。 

對於以註解為中心的配置方式,只需使用 @importresource 註解引入存在的 xml 即可,如下所示: 

@configuration 

@importresource(「classpath:/bookstore/config/spring-beans.xml」) 

public class myconfig 

// 容器的初始化過程和純粹的以配置為中心的方式一致: 

…… 

Spring複習筆記 Spring中的Bean

注意構造器例項化 最常用 靜態工廠方式例項化 例項工廠方式例項化 singleton 單例 始終使用的同乙個物件 預設 prototype 原型 每次都是乙個新的bean例項 request session globalsession websocket init method屬性 用於指定bean...

Spring基礎 Spring中的AOP框架

oop 物件導向程式設計 提供 從上到下 的關係,而aop 面向方面程式設計 提供一種 橫切 的方式,也可以說是 從左到右 簡單來說就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複 降低模組間的耦合度,並有利於未來的可操作性和可維護性。可能光是說aop的定義,大家...

Spring中的QuartzJobBean的使用

一 quartz的特點 按作業類的繼承方式來分,主要有以下兩種 1.作業類繼承org.springframework.scheduling.quartz.quartzjobbean類的方式 2.作業類不繼承org.springframework.scheduling.quartz.quartzjob...