Spring笔记6--value和ref的区别

158 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

如果你想持续观看有关Spring5的笔记,下面是传送门 Spring5入门知识整合(持续更新)

考虑到学习知识的完整型,我觉得还是有必要把value和ref的区别拿出来单独讲讲,不过说实话,这东西还是很容易区分的,学习起来特别快!

区别上面就简述一下吧

value: 是当bean实例的对象通过setter方法对对象属性进行注入时,该属性不属于bean-id引用 ref: 是当bean实例的对象通过setter方法对对象属性进行注入时,该属性属于bean-id引用(一般是对类型是类的属性进行注入才会用)

具体看下面的例子来理解说明,准备好前置工作 1.创建模板(名字随便) 在这里插入图片描述

2.在resource下创建beans.xml文件 在这里插入图片描述

3.在蓝色java上创建一个包,包下创建User类,Friend类 在这里插入图片描述

4.在绿色java上创建myTest类 在这里插入图片描述 在beans.xml导入基础配置信息 在这里插入图片描述

代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

在User类内写入如下属性 在这里插入图片描述

代码:

public class User {
    private Friend myFriend;
    private String name;

    public Friend getMyFriend() {
        return myFriend;
    }

    public void setMyFriend(Friend myFriend) {
        this.myFriend = myFriend;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "myFriend=" + myFriend.toString() +
                ", name='" + name + '\'' +
                '}';
    }
}

在Friend类下写入如下属性 在这里插入图片描述

代码:

package com.ysj.study;

public class Friend {
    private String name;
    private int age;

    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;
    }

    @Override
    public String toString() {
        return "Friend{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

相信学到这里的同学,应该都知道如果通过bean的id来实例化对象了 在这里插入图片描述 首先对于int和String属性来说,他们都是可以直接注入的,可以不需要实例化,所以通过value就可以注入值 但是对于myFriend属性而言,它是一个对象,而类的实例化必须要交给bean来实现装配和实例化,而此图中的bean-id有一个是是属于Freind类的对象,叫friend,所以可以将这个值注入给myUser的id对象中,但是由于friend是bean内装配,故不能使用value,要使用ref(引用bean-id) 其实总结一句 ,==只要你需要注入的值是bean-id,则用ref,否则用value就可以(有些复杂类型不考虑的情况下)==

myTest类下写入如下代码 在这里插入图片描述

代码:

import com.ysj.study.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class myTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        User myUser = (User) context.getBean("myUser");

        System.out.println(myUser.toString());
    }
}

输出结果 在这里插入图片描述