定义一个Performer接口
package com.java.spring;
public interface Performer {
public void perform();
}
定义一个杂技师类(Juggler)实现Performer接口
package com.java.spring;
public class Juggler implements Performer {
private int beanBags = 3;
public Juggler() {
}
public Juggler(int beanBags) {
this.beanBags = beanBags;
}
public void perform() {
System.out.println("JUGGLING " + beanBags + " BEANBAGS");
}
}
定义一个Duke(排练者)类
package com.java.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Duke {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Performer performer = (Performer) ctx.getBean("duke");
performer.perform();
}
}
配置文件
<!-- 采用默认构造方法
<bean id="duke" class="com.java.spring.Juggler"/>
-->
当Spring加载该Bean时,Spring将使用默认的构造器来实例化duke Bean。实际上,duke会使用如下代码来创建:new com.java.spring.Juggler();
通过构造器注入
表演者应该会多种技能
定义一个PoeticJuggler继承Juggler
package com.java.spring;
public class PoeticJuggler extends Juggler {
private Poem poem;
public PoeticJuggler(Poem poem) {
this.poem = poem;
}
public PoeticJuggler(int beanBags, Poem poem) {
super(beanBags);
this.poem = poem;
}
public void perform() {
super.perform();
System.out.println("While recting......");
poem.recite();
}
}
定义一个接口Poem
package com.java.spring;
public interface Poem {
public void recite();
}
定义一个Sonnet29实现接口Poem
package com.java.spring;
public class Sonnet29 implements Poem {
public static String[] LINES = {"昨夜星辰昨夜风,画楼西畔桂堂东。", "身无彩凤双飞翼,心有灵犀一点通。",
"隔座送钩春酒暖,分曹射覆蜡灯红。", "嗟余听鼓应官去,走马兰台类转蓬。"};
public Sonnet29() {
}
public void recite() {
for(String LINE : LINES) {
System.out.println(LINE);
}
}
}
配置文件:
<bean id="sonnet29" class="com.java.spring.Sonnet29" />
<bean id="poeticDuke" class="com.java.spring.PoeticJuggler">
<constructor-arg value="15" />
<constructor-arg ref="sonnet29" />
<span style="white-space:pre"> </span><!-- ref将id为sonnet29的Bean引用传递给构造器 -->
</bean>
Duke不仅是以为杂技师,还是以为诗人
package com.java.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Duke {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
PoeticJuggler poet = (PoeticJuggler) ctx.getBean("poeticDuke");
poet.perform();
}
}