好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

系统学习Spring之Spring in action

系统学习Spring之Spring in action

系统学习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.

成功的人总是找方法,失败的人总是找理由 .

 

分类:  Spring

标签:  Spring

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于系统学习Spring之Spring in action的详细内容...

  阅读:78次