Spring操作指南-IoC基础环境配置(基于XML)

本文内容
环境
案例项目
传统方式装配播放设备
使用Spring的IoC装配播放设备
Spring的IoC做了什么?

本文内容
以一个简单的案例介绍如何基于XML搭建一个Spring开发环境

环境
Spring-4.3.2
Commons-logging-1.2

案例项目
有一台计算机(Computer),这台计算机拥有声音播放设备的接口(PlaybackDevice),因此只需要给计算机装配合适的播放设备,这台计算机就可以播放声音。

现在有两种符合这个接口规格的播放设备,分别是耳机(Earphone)和音箱(VoiceBox)。

播放设备接口 PlaybackDevice.java

package com.oolong.main;
 
public interface PlaybackDevice {
 
    public void play();
    
    public void turnUp();
    
    public void tureDown();
}

计算机 Computer.java

package com.oolong.main;
 
public class Computer {
 
    private PlaybackDevice playDevice;
    
    public void setPlayDevice(PlaybackDevice playDevice) {
        this.playDevice = playDevice;
    }
    
    public void playMusic() {
        playDevice.play();
    }

}

注意这台计算机有一个成员变量是 PlaybackDevice 类型的,表示这台计算机的播放设备接口,只要为这个接口(属性)设置合适的设备,计算机的 playMusic() 方法就能够调用这台播放设备播放音乐了。

耳机 Earphone.java

package com.oolong.main;
 
public class Earphone implements PlaybackDevice {
 
    public void play() {
        System.out.println("Earphone");
    }
 
    public void turnUp() {
        System.out.println("Earphone turn up");
    }
 
    public void tureDown() {
        System.out.println("Earphone turn down");
    }
}

音箱 VoiceBox.java

package com.oolong.main;
 
public class VoiceBox implements PlaybackDevice {
 
    public void play() {
        System.out.println("by Vocie Box");
    }
 
    public void turnUp() {
        System.out.println("Vocie Box turn up");
    }
 
    public void tureDown() {
        System.out.println("Vocie Box turn down");
    }
}

传统方式装配播放设备

传统方式我们要实现这台计算机播放声音的话,我们需要创建一台计算机,然后创建一台播放设备,再将播放设备设置到这台计算机上,如下:

package com.oolong.main;
 
public class Traditional {
 
    public static void main(String[] args) {
        Computer computer = new Computer();
        
        // use earphone
        Earphone earphone = new Earphone();
        computer.setPlayDevice(earphone);
        computer.playMusic();
        
        // use voice box
        VoiceBox vb = new VoiceBox();
        computer.setPlayDevice(vb);
        computer.playMusic();
    }
}

当运行这部分代码的时候,会根据装配的不同的播放设备进行播放。

使用Spring的IoC装配播放设备
对于前面的代码,要使用改用Spring的IoC来实现对象的装配和管理,只需要做两件事:
1、编写配置文件
2、使用Spring的IoC容器来获取bean

1、编写Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="voiceBox" class="com.oolong.main.VoiceBox"></bean>
    <bean id="earphone" class="com.oolong.main.Earphone"></bean>
 
    <bean id="computer" class="com.oolong.main.Computer">
        <property name="playDevice" ref="voiceBox"></property>
    </bean>
 
    <!-- more bean definitions go here -->
 
</beans>

可以看到这里使用了三个<bean>标签声明了三个bean,实际上就是表示根据这三个类创建三个对象

而在创建computer这个bean的时候,设置了一个属性,引用的是前面创建的voiceBox这个bean,也就是说将这个bean作为属性装配到这个computer的bean上

注意,从接触Spring开始会经常用到bean这个词,这个词没有合适的中文翻译,就一直称为bean,我们把交由Spring的IoC容器管理的对象称为bean。

2、通过Spring的IoC容器获取bean

package com.oolong.main;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class AppContainer {
 
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        
        Computer computer = (Computer)ac.getBean("computer");
        computer.playMusic();
    }

}

接下来通过Spring提供的上下文(也就是IoC容器)获取computer这个bean。

Spring有很多种上下文,此处因为是基于XML配置的,所以使用 ClassPathXmlApplicationContext。

当获取到了这个computer bean之后,直接调用其playMusic() 方法,就能够播放音乐了,这是因为Spring的IoC容器已经根据上面的xml配置,帮我们自动装配好了播放设备。

考虑下要更换一个播放设备应该怎么做?

Spring的IoC做了什么?
1、管理bean,也就是对象的创建和销毁
2、维护bean之间的依赖关系
3、?

参考

源码

 

posted @ 2016-12-01 09:27  大肥肥就是我  阅读(981)  评论(1编辑  收藏  举报