Spring - constructor-arg和property的使用示例

Posted liangyuqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring - constructor-arg和property的使用示例相关的知识,希望对你有一定的参考价值。

一、说明
    constructor-arg:通过构造函数注入。 
    property:通过setter对应的方法注入。

二、property使用实例

1、Model代码:

public class Person {
    private String name;
    private int age;
    private String className;
    private String grade;
    private List<Person> friends = new ArrayList<>();

    public List<Person> getFriends() {
        return friends;
    }

    public void setFriends(List<Person> friends) {
        this.friends = friends;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String toString(){
        return "Person [name=" + name + ", classname=" + className +", age=" + age+", grade=" + grade+", friends=\\n" +friends+ "]";
    }
}

 2、xml配置:

<bean id="person" class="models.Person">
        <property name="age" value="22"/>  //通过setXXX方法,所以Person对象属性不用全部设置,classname和grade未设置
        <property name="name" value="liuzg"/>
        <property name="friends">         //通过ref 传入已经初始化的bean wangxin和lirifeng
            <list>                        //liuzg有两个朋友 wangxin和lirifeng
                <ref bean="wangxin"/>    //local只能在同一个XML中实现id引入,而bean可以跨XML文件引入,同时bean可以根据name属性进行引用,使用范围明显较广,更强大。
                <ref bean="lirifeng"/>
            </list>
        </property>
    </bean>
    <bean id="wangxin" class="models.Person">
        <property name="age" value="22"/>
        <property name="name" value="wangxin"/>
    </bean>
    <bean id="lirifeng" class="models.Person">
        <property name="age" value="22"/>
        <property name="name" value="lirifeng"/>
    </bean>

三、constructor-arg使用实例

1、Model代码:

public class Student {
    private String name;
    private int age;
    private String className;
    private String grade;
    private List<Person> friends = new ArrayList<>();


    public Student() {
    }

    public Student(String name,int age,String className,String grade,List<Person> friends){
        this.friends = friends;
        this.name = name;
        this.age = age;
        this.className = className;
        this.grade = grade;
    }
    public String toString(){
        return "student [name=" + name + ", classname=" + className +", age=" + age+", grade=" + grade+", friends=\\n" +friends+ "]";
    }
}

2.xml配置

 <bean id="liangyuqi" class="models.Student">
        <constructor-arg index="0" value="liangyuqi"/>   //通过构造函数,需根据函数形参 全部设置
        <constructor-arg name="age" value="18"/>         //可以根据index或者name设置属性,下标从0开始。boolean的值既可以用0/1填充,也可以用true/false填充。
        <constructor-arg index="2" value="1401"/>
        <constructor-arg index="3" value="95"/>
        <constructor-arg index="4" ref="person"/>
    </bean>

 

四、Test

1.测试代码

public class MyTest {

    public void testSpring(){
        ApplicationContext context = new ClassPathXmlApplicationContext("test.xml");  //1.读取spring初始化的配置文件  
        Object p = context.getBean("liangyuqi"); //2.根据bean获取Student实现类对象 p 
        System.out.println(p);
    }
}

2.输出结果 :      liangyuqi的朋友有liuzg,以及显示liuzg的friends set wnagxin,lirifeng

以上是关于Spring - constructor-arg和property的使用示例的主要内容,如果未能解决你的问题,请参考以下文章

spring配置constructor-arg就报错,property就通过

Spring,Bean,constructor-arg as String

Spring中constructor-arg的value属性是啥意思

SPRING IN ACTION 第4版笔记-第二章Wiring Beans-005-<constructor-arg>和c-namespace

和喜欢Spring的工程师谈谈Spring Beans 自动装配

spring IOC 注入构造方法参数