Spring的自动装配

  作者:记性不好的阁主

例bean:


Teacher

public class Teacher {
    private String teaName;
    private Integer teaAge;
    private Boolean teaGender;
    private String teachCourse;

    public Teacher(){

    }

    public String getTeaName() {
        return teaName;
    }

    public void setTeaName(String teaName) {
        this.teaName = teaName;
    }

    public Integer getTeaAge() {
        return teaAge;
    }

    public void setTeaAge(Integer teaAge) {
        this.teaAge = teaAge;
    }

    public Boolean getTeaGender() {
        return teaGender;
    }

    public void setTeaGender(Boolean teaGender) {
        this.teaGender = teaGender;
    }

    public String getTeachCourse() {
        return teachCourse;
    }

    public void setTeachCourse(String teachCourse) {
        this.teachCourse = teachCourse;
    }

    @Override
    public String toString() {
        return 'Teacher{' +
                'teaName='' + teaName + ''' +
                ', teaAge=' + teaAge +
                ', teaGender=' + teaGender +
                ', teachCourse='' + teachCourse + ''' +
                '}';
    }
}


Student

public class Student {

    private String stuName;
    private Teacher teacher;

    public Student(){

    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    @Override
    public String toString() {
        return 'Student{' +
                'stuName='' + stuName + ''' +
                ', teacher=' + teacher +
                '}';
    }
}



1、手动装配


    <bean id='teacher' class='BeanDemo.Demo01.Teacher'>
        <property name='teaName' value='李老师'></property>
        <property name='teaAge' value='35'></property>
        <property name='teaGender' value='true'></property>
        <property name='teachCourse' value='Java'></property>
    </bean>

    <bean id='student' class='BeanDemo.Demo01.Student'>
        <property name='stuName' value='小明'></property>
        <property name='teacher' ref='teacher'></property>
    </bean>


2、自动装配


方式一:byName

    <bean id='teacher' class='BeanDemo.Demo01.Teacher'>
        <property name='teaName' value='李老师'></property>
        <property name='teaAge' value='35'></property>
        <property name='teaGender' value='true'></property>
        <property name='teachCourse' value='Java'></property>
    </bean>

    <bean id='student' class='BeanDemo.Demo01.Student' autowire='byName'>
        <property name='stuName' value='小明'></property>
    </bean>


方式二:byType

    <bean id='teacher' class='BeanDemo.Demo01.Teacher'>
        <property name='teaName' value='李老师'></property>
        <property name='teaAge' value='35'></property>
        <property name='teaGender' value='true'></property>
        <property name='teachCourse' value='Java'></property>
    </bean>

    <bean id='student' class='BeanDemo.Demo01.Student' autowire='byType'>
        <property name='stuName' value='小明'></property>
    </bean>


方式三:constructor


为Student添加有参构造器

public class Student {

    private String stuName;
    private Teacher teacher;

    public Student(){

    }

    public Student(String stuName,Teacher teacher){
        this.stuName = stuName;
        this.teacher = teacher;
    }

    ......
    (省略get、set方法)
}


配置构造器自动装配

<bean id='teacher' class='BeanDemo.Demo01.Teacher'>
        <property name='teaName' value='李老师'></property>
        <property name='teaAge' value='35'></property>
        <property name='teaGender' value='true'></property>
        <property name='teachCourse' value='Java'></property>
    </bean>

    <bean id='student' class='BeanDemo.Demo01.Student' autowire='constructor'>
        <constructor-arg name='stuName' value='张三'></constructor-arg>
    </bean>



扩展:可以在头文件中 一次性将该ioc容器的所有bean  统一设置成自动装配:

<beans xmlns="http://www.springframework.org/schema/beans"

...

default-autowire="byName">


自动装配虽然可以减少代码量,但是会降低程序的可读性,使用时需要谨慎。


相关推荐

评论 抢沙发

表情

分类选择