两个月前跟着b站动力节点王鹤老师的Spring框架教程视频学习完了Spring框架,在学习过程中我将视频中涉及的代码都一行一行手敲了一遍,并且把Spring入门相关的资料整理了一下,在这里记录一下我在Spring框架学习过程中的笔记和一些心得,希望能帮助到想要通过文字教程入门Spring这一框架的小伙伴哦!
视频地址:2020最新Spring框架教程【IDEA版】-Spring框架从入门到精通
文章目录
基于 XML 的 DI
在 spring 配置文件中,使用标签和属性给 java 对象的属性赋值
1. 注入的语法分类
- set 注入(设值注入):spring 调用类的 setter 方法,setter 方法可以实现属性的赋值
- 构造注入:spring 调用类的有参数构造方法,创建对象。在构造方法中完成赋值。
1)set 注入
简单类型
Student 类:
package com.kaho.di01;
public class Student {
private String name;
private int age;
public Student() {
System.out.println("spring会调用类的无参数构造方法创建对象");
}
//必须要有set方法,不然会报错
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
//未声明属性email的set方法
public void setEmail(String email) {
System.out.println("setEmail:" + email);
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
applicationContext.xml :
<!--声明student对象
注入:就是赋值的意思
简单类型:spring中规定java的基本数据类型和String都是简单类型
di:给属性赋值
1.set注入(设值注入):spring调用类的set方法,用set方法完成属性赋值
1)简单类型的set注入
<bean id="xx" class="yy">
<property name="属性名字" value="此属性的值"/>
一个property只能给一个属性赋值
<property......>
</bean>
-->
<bean id="myStudent" class="com.kaho.di01.Student">
<property name="name" value="张三"/><!--setName("张三")-->
<property name="age" value="20"/><!--setAge(20)-->
<!--调用未声明的属性的set方法-->
<property name="email" value="zhangsan@qq.com"/><!--setName("zhangsan@qq.com")-->
</bean>
<!--创建 java.util.Date 并设置初始的日期时间-->
<bean id="myDate" class="java.util.Date">
<property name="time" value="17287401912"/><!--setTime(17287401912)-->
</bean>
测试方法:
@Test
public void test(){
String config = "di01/applicationContext.xml"; //applicationContext文件不是直接在resources根目录下,需要加上上一层文件名
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//从容器中获取Student对象
Student myStudent = (Student) ac.getBean("myStudent");
System.out.println("student对象=" + myStudent);
Date myDate = (Date) ac.getBean("myDate");
System.out.println("myDate=" + myDate);
}
结果输出:
spring会调用类的无参数构造方法创建对象
setName:张三
setAge:20
setEmail:zhangsan@qq.com
student对象=Student{name='张三', age=20}
myDate=Mon Jul 20 10:03:21 CST 1970
Process finished with exit code 0
注意:spring会先调用类的无参构造器创建对象,再通过set方法进行赋值
spring 的设值注入只关注 set 方法是否存在,通过 property 标签中的 name 属性的值查找是否有对应的setXXX 方法,有则调用,无则报错;就算是类中没有声明过的属性,但只要存在 set 方法,都可以在 bean 标签中进行声明
引用类型
School 类:
package com.kaho.di02;
public class School {
private String name;
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
Student类: