深入学习Spring框架之二构造器注入方式装配Bean

来源:互联网 发布:粉尘分散度数据 编辑:程序博客网 时间:2024/06/04 19:11

    这一节我们来看看怎么使用Spring创建我们的Bean对象。

    容器是Spring的核心,Spring的容器有两种类型:Bean工厂,由BeanFactory接口定义,是最简单的容器;以及应用上下文,由ApplicationContext定义。Bean工厂对于大多数应用来说太低级了,因此应用上下文更为受欢迎。

    应用上下文又可以分为以下几种类型:

        ClassPathXmlApplicationContext----从类路径下的XML配置文件加载上下文,把应用上下文定义文件当作类资源

FileSystemXmlApplicationContext----读取文件系统下的XML配置文件并加载上下文定义

XmlWebApplicationContext----读取Web应用下的XML配置文件并装载上下文定义


    下面我们来应用Spring创建Bean对象,首先我们来模拟一个环境,G20峰会的晚会表演,据说很不赖,画面直接可以做壁纸

/** * 面向接口编程,表演者接口 * @author liuyc * */public interface Performer {public void perform();}
/** * 歌手类 * @author liuyc * */@SuppressWarnings("all")public class Singer implements Performer{private String song;private Instrument instrument;public Singer() {}public Singer(String song) {this.song = song;}public Singer(String song, Instrument instrument) {super();this.song = song;this.instrument = instrument;}@Overridepublic void perform() {this.instrument.play(song);System.out.println("while singing ...");}}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="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"><bean id="singer"  class ="com.cm2easy.miki.example.chapter1.Singer"></bean></beans>
这样我们就声明了一个简单Bean,在xml配置文件中我们没有进行任何多余的配置,这个时候spring默认是调用类的默认构造器,所产生的结果与我们的传统创建对象的方法是一样的:

Singer singer = new Singer();


我们还可以调用有参的构造器声明一个Bean:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="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"><bean id="singer"  class ="com.cm2easy.miki.example.chapter1.Singer"><constructor-arg value="听妈妈的话"></constructor-arg></bean></beans>
这种构造器注入的方式相当于我们调用有参构造new一个对象,效果是一模一样的:

Singer singer = new Singer("听妈妈的话");


我们不仅可以像上面那样通过构造器注入基本类型的变量,还可以通过构造器将对象的引用注入:

/** * 乐器接口 * @author liuyc * */public interface Instrument {public void play(String melodyName);}
/** * 钢琴类 * @author liuyc * */public class Piano implements Instrument{@Overridepublic void play(String melodyName) {System.out.println("正在演奏" + melodyName);}}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="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"><bean id="singer"  class ="com.cm2easy.miki.example.chapter1.Singer"><constructor-arg value="听妈妈的话"></constructor-arg><constructor-arg ref="piano"></constructor-arg></bean><bean id="piano" class="com.cm2easy.miki.example.chapter1.Piano"></bean></beans>
如上所示,在调用public Singer(String song, Instrument instrument)构造器之前,先要声明Instrument的对象,再通过构造器注入生命singer对象,这样歌手不仅可以唱歌还可以演奏对应歌曲的钢琴曲了


构造器注入的方式声明Bean对象,无外乎上面的情况,掌握了以上配置要想通过构造器声明对象就可以游刃有余了。





1 0
原创粉丝点击