本文内容
环境
案例项目
传统方式装配播放设备
使用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、?
参考