首页 专题 文章 代码 归档
基于xml的自动装配
2020.01.23 09:56 2020.01.23 09:56

基于xml的自动装配问题

新建配置文件spring-ioc-6.xml,新建测试文件Test06.java

测试1:如果我们没给Student赋属性,那么他的引用类型都是null

<!--测试基于xml自动装配-->
<bean class="com.misiai.bean.Car" id="car">
    <property name="name" value="宝马"/>
    <property name="price" value="90000"/>
    <property name="color" value="黑色"/>
</bean>
<bean class="com.misiai.bean.Student" id="student">

</bean>
/*测试bean自动装配*/
public class Test06 {
    ConfigurableApplicationContext ap = new ClassPathXmlApplicationContext("spring-ioc-6.xml");

    /**
     * 测试bean自动装配
     */
    @Test
    public void test01() throws SQLException {
        Student student = ap.getBean(Student.class);
        System.out.println("student = " + student);

    }
}

结果:

截图-1579740780

结论:car是没有值的。

测试2

想为student自动装配一些属性,那么可给其添加一个属性:autowire

其值可为:

  • default/no,默认,即不装配
  • byName,按照名字
  • byType
  • constructor

A. byName

<bean class="com.misiai.bean.Car" id="car">
    <property name="name" value="宝马"/>
    <property name="price" value="90000"/>
    <property name="color" value="黑色"/>
</bean>
<bean class="com.misiai.bean.Student" id="student" autowire="byName">

</bean>

只需添加上byName,然后就可以自动装配啦!

截图-1579741486

注意:被装配的bean的id要和待装配的bean的属性名一致,即如上面的car。


B. byType

<!--测试基于xml自动装配-->
<bean class="com.misiai.bean.Car" id="car01">
    <property name="name" value="宝马"/>
    <property name="price" value="90000"/>
    <property name="color" value="黑色"/>
</bean>
<bean class="com.misiai.bean.Student" id="student" autowire="byType">

</bean>

截图-1579741685

结论:通过byType自动装配的话,就不用在意id,比如上面我改成了car01

但是,通过类型的话,很明显:如果有多个同类型的bean,那么会报错。

<!--测试基于xml自动装配-->
<bean class="com.misiai.bean.Car" id="car01">
    <property name="name" value="宝马"/>
    <property name="price" value="90000"/>
    <property name="color" value="黑色"/>
</bean>
<bean class="com.misiai.bean.Car" id="car02">
    <property name="name" value="奔驰"/>
    <property name="price" value="80000"/>
    <property name="color" value="银色"/>
</bean>
<bean class="com.misiai.bean.Student" id="student" autowire="byType">

</bean>
expected single matching bean but found 2: car01,car02

C. constructor

Student添加一个只有car的构造器,注释掉其他构造器

public Student(Car car) {
    this.car = car;
}

xml配置文件只能保留一个类型!

<!--测试基于xml自动装配-->
<bean class="com.misiai.bean.Car" id="car01">
    <property name="name" value="宝马"/>
    <property name="price" value="90000"/>
    <property name="color" value="黑色"/>
</bean>
<bean class="com.misiai.bean.Student" id="student" autowire="constructor">

</bean>

结果:

截图-1579742337

本节阅读完毕! (分享
二维码图片 扫描关注我们哟