Spring自动装配之byName和byType【Spring入门】

来源:互联网 发布:焊接画图软件 编辑:程序博客网 时间:2024/06/05 05:15

在使用Spring框架时,有些bean中有个成员变量是另一个bean。举个实际的例子,比如说CDPlayer类(CD播放器类)中有一个属性是CD(接口),代表着CDPlayer可以放各种CD,可以实例化为Mayday(五月天的歌)。

原来我们需要在配置CDPlayer这个bean的时候添加<porperty>,手动装配。代码如下:

        <bean id="cd" class="com.yykj.Mayday" />        <bean id="cdPlayer" class="com.yykj.CDPlayer">                <!--name这个值是根据setter方法名来确定的,所以手动装配setter是必须有的-->                <property name="cd" ref="cd"/>        </bean>
现在我们使用自动装配,不需要添加<porperty>属性。

这是CDPlayer类:

package com.yykj;public class CDPlayer {    private CD cd;/*    byName自动装配以及手动装配都与setter方法名有关,与属性无关。    byType自动装配与setter中的参数类型有关*/    public void setCd(CD cd) {        this.cd = cd;    }    public void play(){        cd.Play();    }}

测试类:

package com.yykj;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)//在测试时,不启动服务器,所以不会加载web.xml,要手动初始化spring配置文件@ContextConfiguration(locations = "classpath*:applicationContext.xml")public class TestCD {    @Test    public void CDPlayerTest(){        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//获取上下文        CDPlayer cdPlayer = context.getBean(CDPlayer.class);        cdPlayer.play();    }}

自动装配有两种方式:

1.byName

在spring配置文件的<beans>标签中加入代码:dafault-autowire="byName"

被装配类中的setter方法还是需要的,因为是byName,所以setter方法名要与bean的id对应,比如bean的id为cd,那么setter方法名为setCd。

2.byType

在spring配置文件的<beans>标签中加入代码dafault-autowire="byType"。

被装配类中的setter方法的参数类型要与bean的class的类型一样,才能自动装配到。

注意:以上两种自动装配方法本质上都是通过反射,构造出对应的setter方法,然后执行setter方法。

0 0