spring in action 学习笔记(二)通过构造器注入对象的引用

来源:互联网 发布:无限的未知知乎 编辑:程序博客网 时间:2024/06/03 12:29

上一节中,场景了搞了一个选秀大赛,每个参赛的人都有表演的能力(实现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>


这个时候,运行poeticJuggler的主方法,就会打印如下信息

JUGGLING 6 BEANBAGS
While reciting ...
1
2
3