1. 程式人生 > >Spring bean的三種建立方式

Spring bean的三種建立方式

1、建立Spring工程

使用eclipse建立一個Spring工程,一個簡單的方法就是先建立一個Java工程,然後將Spring的Jar包全部放入到工程裡面即可開始編寫基於Spring框架的程式。Spring的Jar包可以從github上的原始碼中取得,下載地址是:。

下面是在學習《Spring實戰》時建立的一個Spring工程,其目錄結構如下:

在Spring中,建立應用物件之間協作關係的行為通常被稱為裝配(wiring),這也是依賴注入的本質,而依賴注入和AOP則是Spring框架的核心。下面就是Spring中Bean的裝配,從Spring3.0開始,Spring容器就提供了兩種Bean裝配方式:XML檔案和Java註解,先從XML檔案配置學起。

2、建立Bean

Spring的xml配置檔案如下:

注意:

Spring的xml配置檔案中xsd檔案路徑原本使用的網路路徑,但是也可以使用本地的類庫路徑,因為在引入的spring包中spring-beans-3..*.RELEASE.jar中有spring-beans-3.0.xsd檔案。

Bean配置檔案中建構函式的引數順序預設情況下必須與類定義中的引數順序一致,也可以使用index(從0開始)屬性來指定引數對應順序。對於非基本型別,需要使用ref屬性來引用其他bean。

對於Bean的建立,主要有三種方式:

1、構造器注入建立

     對於有公共的構造方法的類(無論是預設的還是顯示申明的構造方法),都可以使用構造器注入來建立為Bean

package lucien;

public class PoeticJuggler extends Juggler {
	private Poem poem;

	public PoeticJuggler(Poem poem) {
		this.poem = poem;
	}

	public PoeticJuggler(int beanbags, Poem poem) {
		super(beanbags);
		this.poem = poem;
		System.out.println("構造器注入建立PoeticJuggler");
	}

	public void perform() {
		super
.perform(); System.out.println("reciting..."); poem.recite(); } }

2、工廠方法建立

    對於沒有公共構造方法的類,可以使用它的一個靜態方法(無論該方法是private還是public,只要是static即可)來建立Bean。

package lucien;

public class Stage {

	//私有的構造方法
	private Stage() {
	}

	//靜態的內部類
	private static class StageSingletonHolder {
		static Stage instance = new Stage();
	}

	//靜態方法
	public static Stage getInstance() {
		System.out.println("工廠方法建立Stage");
		return StageSingletonHolder.instance;
	}

	public void perform() {
		System.out.println("Stage performance");
	}
}

3、工廠類建立

    使用工廠類的非靜態方法(private和public均可,但必須是非static的)

package lucien;

public class Juggler implements Performer {
	private int beanBags = 3;

	public Juggler() {
	}

	public Juggler(int beanBags) {
		this.beanBags = beanBags;
	}

	@Override
	public void perform() {
		// TODO Auto-generated method stub
		System.out.println("JUGGLING " + beanBags + " BEANBAGS");
	}
}
package lucien;

public class JugglerFactory {
	public Juggler getJuggler() {
		System.out.println("工廠類建立Juggler");
		return new Juggler();
	}

}
package lucien;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ctx = new ClassPathXmlApplicationContext("ConfigFile.xml");
		Performer performer = (Performer) ctx.getBean("poeticDuke");
		performer.perform();

		Stage stage = (Stage) ctx.getBean("stage");
		stage.perform();

		Juggler juggler = (Juggler) ctx.getBean("duke2");
		juggler.perform();

	}

}