我是靠谱客的博主 笨笨麦片,最近开发中收集的这篇文章主要介绍Spring自动装配之byName和byType【Spring入门】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在使用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方法。

最后

以上就是笨笨麦片为你收集整理的Spring自动装配之byName和byType【Spring入门】的全部内容,希望文章能够帮你解决Spring自动装配之byName和byType【Spring入门】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部