上一节中,场景了搞了一个选秀大赛,每个参赛的人都有表演的能力(实现performer接口,实现performe方法),虚拟了一个杂技师,这个杂技师可以抛豆袋子,默认是3个,我们在构造器中给这个杂技师注入了15个豆袋子的属性,即通过构造器注入基本类型的属性,这节我们学习如何通过构造器注入对象的引用。
再次虚拟了一个杂技师,这个杂技师比上节中叫duke的杂技师能力更出众,会朗诵诗歌。
我们先定义一个朗诵诗歌的接口
/**
* Created by csucoderlee on 2017 10 05 22:39.
* 朗诵诗歌的接口
*/
public interface Poem {
void recite();
}
再定义一个具体的诗歌
/**
* Created by csucoderlee on 2017 10 05 22:41.
*
* 定义了一首普通的诗歌
*/
public class Sonnet29 implements Poem {
private static final String[] LINES = {"1", "2", "3"};
public Sonnet29() {
}
public void recite() {
for (int i = 0; i < LINES.length; i++){
System.out.println(LINES[i]);
}
}
}
这次的杂技师叫poeticJuggler
/**
* Created by csucoderlee on 2017 10 05 22:37.
*/
public class PoeticJuggler extends Juggler{
private Poem poem;
public PoeticJuggler(){}
public PoeticJuggler(int beanBags, Poem poem) {
super(beanBags);
this.poem = poem;
}
@Override
public void perform() {
super.perform();
System.out.println("While reciting ...");
poem.recite();
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/spring-beans.xml");
Performer performer = (Performer) ctx.getBean("poeticJuggler");
performer.perform();
}
}
poeticJuggler继承Juggler,他可以抛袋子,同时也可以朗诵诗歌,我们在配置文件中,加载一个诗歌的bean,并且通过构造器将该诗歌的对象引用注入给poeticJuggler。
<!-- 声明了一首诗 -->
<bean id="sonnet29" class="com.springinaction.ch02.Sonnet29"/>
<bean id="poeticJuggler" class="com.springinaction.ch02.PoeticJuggler">
<constructor-arg value="6"/>
<constructor-arg ref="sonnet29"/>
</bean>
JUGGLING 6 BEANBAGS
While reciting ...
1
2
3