系統學習Spring之Spring in action(一)


廢話兩 句,以前也看過Spring in action,那時候只能草草的看看,沒有仔細閱讀,如今在讀Spring in action 是想發奮圖強,幾個月后就要結婚了,也許會在今年會要寶寶,為了給寶寶一個更好的生活環境,為了做一個好爸爸,我從現在開始努力的工作,努力的學習,我想 在博客園中留下我的奮斗足跡,同時也鞭策自己,不要放棄自己的初衷。                                          

                                              --2013-03-18 劉帥 寫於南京

----------------------------以上內容純屬戰前動-------------------------  

    

  文章導讀:

  1.〖用依賴注入實例到第一個Pojo類〗

  2.〖通過構造器來注入Pojo類〗

 

  Spring框架的核心是Spring Container,Spring有多種Spring Container的實現,但歸根結底分為兩類:

  1.BeanFactory創建最簡單的Spring Container提供最基本的DI(Dependency Injection)和bean-wiring服務.

  2.ApplicationContext創建的SpringContainer提供更多的高級框架服務.

  在這篇文章中和以后的文章中,我會把主要的精力放在ApplicationContext創建的SpringContainer上,在以后的文章中不在贅述.

  Wiring Beans

   〖用依賴注入實例到第一個Pojo類〗

    1.首先創建一個玩家接口方便后面使用.

 

public interface Player {
    public void play();
}

 

    2.創建一個Dota玩家類,繼承自玩家類

    

public class DotaPlayer implements Player {
    
    //已殺敵人總數
    private int currentKill = 0;
    
    //沒有參數的構造方法 
    public DotaPlayer(){}
    
   //以基本類型為參數的構造方法 
public DotaPlayer(int currentKill){ this.currentKill = currentKill; }; //重寫Player類中的play()方法 @Override public void play() { // TODO Auto-generated method stub System.out.println("DOTA玩家已經殺了"+ this.currentKill +"個敵人."); } }

    3.類創建好了,下面用Spring配置文件來配置這個類,為實例化這個類做准備.

<bean id="dotaPlayer" class="com.ricky.zero.pojo.DotaPlayer"></bean>

其中com.ricky.zero.pojo是創建DotaPlayer的包名,DotaPlayer是類名,到這里Spring Configuration已經配置完成,下面讓我們來實例化這個DotaPlayer玩家類.

    4.實例化DotaPlayer類.

public class DITest {

    //用Spring的DI(依賴注入)實例化第一個Pojo類.
    @Test
    public void DITest1(){
        //當Spring container 加載Spring配置文件后,<beans></beans>標簽下的所有<bean></bean>將會被實例化.
        ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
        DotaPlayer dotaPlayer = (DotaPlayer)ctx.getBean("dotaPlayer");
        dotaPlayer.play();
    }
}

    5.運行Test后結果如下:

DOTA玩家已經殺了0個敵人.
說明DotaPlayer類已經被實例化成功.到此,恭喜你完成了學習Spring的第一步,實例化一個Pojo類.

 

  〖通過構造器來注入Pojo類〗

     1.其實在上文中,我已經在使用構造器來實例化類了,在上文的DotaPlayer類中,我創建了兩個構造方法,一個是沒有參數的構造方法,一個是 有參數的構造方法,在注入DotaPlayer對象中默認調用了它的無參構造方法,若刪除上文的無參構造方法,只保留有參的構造方法則會拋以下的異常:

Could not instantiate bean class [com.ricky.zero.pojo.DotaPlayer]: No default constructor found.

所有在重寫構造方法的時候一定記得寫一個無參的構造方法.

    2.當然,我在DotaPlayer類中創建兩個構造方法是有原因的,也許有人已經想到了,那現在就來看,Spring如何通過有參構造方法來注入Pojo對象.

    3.已經寫到的類和接口不用做任何改變,只需要將Spring的Configuration的作如下修改:

 

    <bean id="dotaPlayer" class="com.ricky.zero.pojo.DotaPlayer">
        <constructor-arg value="10"></constructor-arg>
    </bean>

 

<constructor-arg value="10"></constructor-arg>元素的作用是給構造器的傳遞參數,若沒有該元素,Spring Container將會調用默認的構造器,若沒有默認的構造器則會
拋上述異常.
  4.修改完成后,運行結果若如下:
DOTA玩家已經殺了10個敵人.
則證明成功的使用有參數的構造方法注入Pojo對象.

  5.在上述步驟里,成功的使用了有參和無參的構造器注入了Pojo對象,在有參構造器中,我給構造器的參數是基本類型的,下面將用構造器來注入一個Pojo對象.
  首先我們創建一個Game接口,方便下面使用.
public interface Game {
    //獲取游戲名稱
    public void getGameName();
}

創建一個魔獸爭霸游戲類,類名War3繼承自Game接口.

 

public class War3 implements Game {

    @Override
    public void getGameName() {
        // TODO Auto-generated method stub
        System.out.println("大家好,我的名字叫魔獸爭霸,相信你們很多人都已經認識我了.");
    }


}

  

  6.在上述基礎上修改兩處,在DotaPlayer類中添加一個構造方法,如下:
    //以對象類型為參數的構造方法
    
    public DotaPlayer(War3 war3){
        this.war3 = war3;
    };    

  在play()方法中,調用War3對象的getGameName()方法.如下:

    //重寫Player類中的play()方法
    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("DOTA玩家已經殺了"+ this.currentKill +"個敵人.");
        war3.getGameName();
    }

 

 

  在Spring的configuration中修改如下:

    <bean id="war3" class="com.ricky.zero.pojo.War3"></bean>
    <bean id="dotaPlayer" class="com.ricky.zero.pojo.DotaPlayer">
        <constructor-arg ref="war3"></constructor-arg>
    </bean>

第一個<bean id="war3" class="com.ricky.zero.pojo.War3"></bean>使用Spring中無參構造方法注入Pojo類,然后把已經實例化的對象作為dotaPlayer

bean的構造參數,注入到構造方法中.至此完成了用構造方法來注入對象.

  7.讓我們來檢驗用構造方法注入對象是否成功,若結果如下,則注入成功.

DOTA玩家已經殺了0個敵人.
大家好,我的名字叫魔獸爭霸,相信你們很多人都已經認識我了.

 

 

------------------------------明天預告----------------------------

  到此,用構造方法來注入有參或者無參的Pojo類就結束了,由於明天還要上班,今天就分享到這,明天我們講分享Bean的Scope、

init-method 、destory-method以及如何使用setter方法來注入基本類型和Pojo類.

--------------------------------申明----------------------------       

                  本文可以免費閱讀以及轉載,轉載時請注明出處.      

                  本人郵箱:Ricky_LS@163.com

                  Thank you for your corporation.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM