程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 【Spring 3】spring中的bean,springbean

【Spring 3】spring中的bean,springbean

編輯:JAVA綜合教程

【Spring 3】spring中的bean,springbean


環境准備

  • Eclipse上新建一個簡單的maven工程,Artifact Id選擇maven-archetype-quickstart;
  • 添加spring-context依賴;
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.16.RELEASE</version>
        </dependency>
  • resources目錄下添加spring的配置文件spring.xml;
  • 開始編寫bean及測試代碼;

Bean的創建方式

默認構造方法創建bean

首先,寫一個雜技師類;

package cn.edu.hdu.sia.chapter2; public class Juggler implements Performer { private int beanBags = 3; public Juggler() { } public Juggler(int beanBags) { this.beanBags = beanBags; } public void perform() throws PerformanceException { System.out.println("JUGGLING " + beanBags + " BEANBAGS"); } } View Code

在spring配置文件中聲明該雜技師Bean(未配置<constructor-arg>,將使用默認構造方法);

  <bean id="duke" class="cn.edu.hdu.sia.chapter2.Juggler">
  </bean>

在main方法中使用該雜技師bean;

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
        Performer performer = (Performer) ctx.getBean("duke");
        performer.perform();
    }

非默認構造方法創建bean

構造方法參數為基本數據類型的情況

接著上例的例子,可以在配置bean的時候,往構造方法傳入參數,如下配置,將調用public Juggler(int beanBags)構造方法創建雜技師bean;

  <bean id="duke" class="cn.edu.hdu.sia.chapter2.Juggler">
    <constructor-arg value="15" />
  </bean>

構造方法參數為對象引用類型的情況

現在,我們將要給雜技師增加吟詩行為;

先定義一個詩歌背誦接口:

package cn.edu.hdu.sia.chapter2;

public interface Poem {
    public void recite();
}

再寫一個吟詩實現類:

package cn.edu.hdu.sia.chapter2;

public class JingYeSi implements Poem{

    public void recite() {
        System.out.println("床前明月光~");
    }

}

然後編寫吟詩雜耍類:

package cn.edu.hdu.sia.chapter2; public class PoeticJuggler extends Juggler { private Poem poem; public PoeticJuggler(int beanBags, Poem poem) { super(beanBags); this.poem = poem; } /** * @see cn.edu.hdu.sia.chapter2.Juggler#perform() * @throws PerformanceException */ @Override public void perform() throws PerformanceException { super.perform(); poem.recite(); } } View Code

在spring配置文件中聲明該雜技師Bean,注意構造方法的第二個參數為對象引用,引用id為“jingyesi”的bean;

可以用index屬性指定構造方法參數索引下標,type指定構造方法參數類型,name指定構造方法參數名,用於區分不同的參數;

    <bean id="jingyesi" class="cn.edu.hdu.sia.chapter2.JingYeSi">
    </bean>
    
    <bean id="poeticDuke" class="cn.edu.hdu.sia.chapter2.PoeticJuggler">
        <constructor-arg value="15" />
        <constructor-arg ref="jingyesi" />
    </bean>

最後參考前面寫的main方法測試perform的執行情況,發現該雜技師Bean不僅能雜耍,還能吟詩;

 工廠方法創建bean

當構造方法為私有的時候,是不能夠通過構造方法創建bean的,這時候一般通過工廠方法創建,如下為一個典型的單例類,其構造方法為私有屬性:

package cn.edu.hdu.sia.chapter2;

public class Stage {

    private Stage() {
    }

    private static class StageSingletonHolder {
        static Stage stage = new Stage();
    }

    public static Stage getInstance() {
        return StageSingletonHolder.stage;
    }
    
    public void printDescription(){
        System.out.println("this is a stage.");
    }
}

要創建該bean,需要在spring配置文件中做如下配置:

可以用factory-bean屬性設置指定的工廠bean,用<constructor-arg>標簽往factory-method傳入參數;

<bean id="theStage" class="cn.edu.hdu.sia.chapter2.Stage" factory-method="getInstance" />

bean的作用域

所有的bean在spring上下文范圍內默認都是“單例”的,即只有一個實例,注意,這裡的單例指的是spring上下文范圍內的單例;要修改該配置項,只需要配置scope屬性,scope默認是singleton,可配置的屬性值如下列表:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved