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