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

如果你想持续观看有关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());
    }
}

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

猜你喜欢

转载自blog.csdn.net/YSJ367635984/article/details/113246291