標籤:
之前接觸的都是基於XML配置的Spring,Spring3.0開始可以幾乎不使用XML而使用純粹的java代碼來配置Spring應用。使用基於java配置的Spring的步驟如下:
1. 建立基於java的配置。
配置極少量的XML來啟用java配置:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:component-scanbase-package="com.springinaction.springidol" /></beans>
<context:component-scan>除了知道如何自動註冊那些使用某種構造型(stereotype)的註解所標註的Bean,它也會自動載入使用 @Configuration註解所標註的類。在上面的配置中,base-package屬性告知Spring在com.springinaction.spring-idol包內尋找使用@Configuration註解所標註的所有類。
2. 定義一個配置類
在基於java的配置裡使用@Configuration註解的java類,就等價於XML配置中的<beans>元素,如下所示:
package com.springinaction.springidol;import org.springframework.context.annotation.Configuration;@Configurationpublic class SpringIdolConfig {// Bean declaration methods go here}
@Configuration註解會作為一個標識告知Spring:這個類將包含一個或多個Spring Bean的定義。這些Bean的定義是使用@Bean註解所標註的方法。接下來使用@Bean來裝配使用Spring基於java的配置所聲明的Bean。
3. 聲明一個簡單的Bean
使用@Bean註解標註一個方法來定義duke Bean:
@Beanpublic Performer duke() {return new Juggler();}
上面的配置等價於之前使用XML所配置的<bean>元素。@Bean告知Spring這個方法將返回一個對象,該對象應該被註冊為Spring應用上下文中的一個Bean。方法名將作為該Bean的ID。在該方法中所實現的所有邏輯本質上都是為了建立Bean。
4. 使用Spring的基於java的配置進行注入。
之前,在XML設定檔中使用構造方法注入,使用<constructor-arg>元素來建立同時拋出15個的雜技師。而使用基於java的配置,只需要把數字直接傳人構造器中:
@Beanpublic Performer duke15() {return new Juggler(15);}
Setter方法注入也是自然的java代碼:
@Beanpublic Performer kenny() {Instrumentalist kenny = new Instrumentalist();kenny.setSong("Jingle Bells");return kenny;}
上面展示的是基於java配置的對於簡單值的構造器注入和Setter方法注入。接下來說明Bean是如何裝配另一個Bean的引用的。
首先用java聲明一個sonnet29 Bean:
@Beanprivate Poem sonnet29() {return new Sonnet29();}
這是一個簡單的基於java的Bean的聲明。
接下來建立一個PoeticJuggler Bean,通過構造器為它裝配sonnet29 Bean:
@Beanpublic Performer poeticDuke() {return new PoeticJuggler(sonnet29());}
上面就是通過引用其他Bean的方法來裝配Bean的引用。
在Spring的java配置中,通過聲明方法引用一個Bean並不等同於調用該方法。
通過使用@Bean註解標註sonnet29()方法,會告知Spring我們希望該方法定義的Bean要被註冊進Spring的應用上下文中。因此,在其他Bean的聲明方法中引用這個方法時,Spring都會攔截該方法的調用,並嘗試在應用上下文中尋找該Bean,而不是讓方法建立一個新的執行個體。
spring實戰六之使用基於java配置的Spring