zoukankan      html  css  js  c++  java
  • 系统学习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
  • 相关阅读:
    springMVC源码分析
    世界近代史二
    世界近代历史
    UVA
    UVA
    UVA
    Web 前端开发学习之路(入门篇)
    01 Linux入门介绍
    2. Python基本知识
    1. 初识Python
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2970047.html
Copyright © 2011-2022 走看看