Spring——IoC(二)基于XML的SpringBean的装配

来源:互联网 发布:京东网上商城淘宝 编辑:程序博客网 时间:2024/05/17 01:20

 在Spring中,对象无需自己负责查找或创建与其关联的其他对象。相反,容器负责把需要相互协作的对象引用赋予各个对象。创建应用对象之间协作关系通常被称为装配(wiring),这也是依赖注入的本质。Spring中的装配主要是使用Java中反射的机制。下面来举例说明使用XML的形式来进行SpringBean的装配。

一、建立如下目录结构如图一 目录结构图所示:


图一 目录结构图

二、在lib中导入jar包如图二 jar包图所示:

图二 jar包图

三、spring-ioc.xml中进行如下配置:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"></beans>
环境已经配置完成,下面进行代码的编写:

定义一个Performer接口:

package com.springinaction.springidol;public interface Performer {void perform();}
定义一个Performer的实现类Juggler:

private int beanBags = 3;public Juggler(){}public Juggler(int beanBags){this.beanBags = beanBags;}@Overridepublic void perform() {System.out.println("JUGGLING "+beanBags+" BANBANS");}}
在xml中进行如下配置:

<bean id="duke" class="com.springinaction.springidol.Juggler"/>
客户端代码如下:

public class AnimalTest {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("com/configuration/spring-ioc.xml");Performer performer = (Performer)ctx.getBean("duke");performer.perform();}}
下面使用构造器和属性注入的方式进行对象之间的装配:

构造器注入:

public interface Poem {public void recite();}
public class Sonnet29 implements Poem {private static String[] LINES = {"床前明月光,","疑是地上霜。","举头望明月,","低头思故乡。"};public Sonnet29(){}@Overridepublic void recite() {for(int i=0; i<LINES.length; i++){System.out.println(LINES[i]);}}}
public class PoeticJuggler extends Juggler {private Poem poem;public PoeticJuggler(Poem poem){super();this.poem = poem;}public PoeticJuggler(int beanBags, Poem poem){super(beanBags);this.poem = poem;}public void perform(){super.perform();System.out.println("While reciting......");poem.recite();}}
<bean id="sonnet29"       class="com.springinaction.springidol.Sonnet29"/><bean id="poeticDuke"      class="com.springinaction.springidol.PoeticJuggler">      <constructor-arg value="15"/>  <constructor-arg ref="sonnet29"/></bean>

属性注入:

public class Piano implements Instrument {public Piano(){}@Overridepublic void play() {System.out.println("PLINK PLINK PLINK");}}
package com.springinaction.springidol;public class Saxophone implements Instrument {@Overridepublic void play() {System.out.println("TOOT TOOT TOOT");}}
package com.springinaction.springidol;public class Instrumentalist implements Performer {private Instrument instrument;private String song;public Instrumentalist(){}@Overridepublic void perform() {System.out.println("Playing "+song+":");instrument.play();}public void setSong(String song){this.song = song;}public String getSong(){return song;}public void setInstrument(Instrument instrument){this.instrument = instrument;}}
<bean id="saxophone" class="com.springinaction.springidol.Saxophone"/><bean id="piano" class="com.springinaction.springidol.Piano"/><!--通过set方法将一个对象注入另一个对象中--><bean id="kenny" class="com.springinaction.springidol.Instrumentalist"><property name="song" value="Jingle Bells"/><!-- <property name="instrument" ref="saxophone"/> --><property name="instrument" ref="piano"/></bean>
集合的装配:

package com.springinaction.springidol;import java.util.Map;public class OneManBand implements Performer {//private Collection<Instrument> instruments;public OneManBand(){}//@Override//public void perform() {//for(Instrument instrument : instruments){//instrument.play();//}//}//public void setInstruments(Collection<Instrument> instruments){//this.instruments = instruments;//}@Overridepublic void perform(){for(String key : instruments.keySet()){System.out.println(key+": ");Instrument instrument = instruments.get(key);instrument.play();}}private Map<String, Instrument> instruments;public void setInstruments(Map<String, Instrument> instruments){this.instruments = instruments;}}
<!--List的注入--><!--Set的注入与List相同--><!-- <bean id="hank"       class="com.springinaction.springidol.OneManBand"><property name="instruments"><list><ref bean="piano"/><ref bean="saxophone"/></list></property> </bean> --><!--Map的注入方式--><bean id="hank"       class="com.springinaction.springidol.OneManBand"><property name="instruments"><map><entry key="Piano" value-ref="piano"/><entry key="Saxophone" value-ref="saxophone"/></map></property></bean>
参考资料:《Spring in action》

0 0