Spring学习笔记 第二章 如何使用Ioc
创建Maven工程,pom.xml添加依赖
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
(1) 传统方式
Student.java
package com.hbb.entity;
import lombok.Data;
@Data
public class Student {
private long id;
private String name;
private int age;
}
StudentTest.java
package com.hbb.test;
import com.hbb.entity.Student;
public class StudentTest {
public static void main(String[] args) {
Student sdt = new Student();
sdt.setId(1L);
sdt.setAge(28);
sdt.setName("范小花");
System.out.println(sdt);
}
}
执行结果:Student(id=1, name=范小花, age=28)
此处需要导入lombok的jar包。作用是简化实体类的开发。从网上下载的lombok-1.18.6.jar版本,配置到pom.xml里。配置好后找到jar的本地位置,通过CMD命令执行安装。
命令:java -jar lombok-1.18.6.jar
按照提示将自己的IDE加入。安装后将IDE重启并clean工程即可使用。配置好后,对于实体类,不需要再实装set/get方法和toString方法,即可直接调用。
添加lombok依赖的方法:
pom.xml
<!-- 简化实体类的开发 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
(2) 通过IoC创建
在配置文件中添加需要管理的对象。XML格式的配置文件,文件名可自定义。
Spring.xml(resources目录下)
<!-- 通过ID来区分bean,名字可以自定义 -->
<bean id="student" class="com.hbb.entity.Student">
<property name="id" value="11"></property>
<property name="age" value="20"></property>
<property name="name" value="牛大壮"></property>
</bean>
如果创建的maven工程没有resources目录,可以自己添加。 添加方法:工程 --→ Properties --→ Java Build Path --→ Source --→ Add Folder --→ Create New Folder --→ 输入[src/main/resources] --→ OK
从IoC获取对象
StudentTest.java
// 加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
Student student = (Student) applicationContext.getBean("student");
System.out.println(student);
- 通过配置bean标签来完成对象的管理
・id属性: 相当于对象名
・class属性: 对象的模板类
※所有交给IoC容器管理的类必须有无参构造函数,因为Spring底层是通过反射机制来创建对象,调用的是无参构造
如果没有无参构造方法,运行时会报以下错误:
Causedby:java.lang.NoSuchMethodException:com.hbb.entity.Student.init()
补充:lombok的@AllArgsConstructor标签可用来添加有参构造方法
- 对象的成员变量通过property标签完成赋值
・name:成员变量名
・value:成员变量值(基本数据类型,String类型可以直接赋值,其他引用类型不能通过value来赋值)
・ref:将IoC中的另外一个bean赋值给当前成员变量(DI)
Address.java
public class Address {
private long id;
private String name;
}
Student.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private long id;
private String name;
private int age;
private Address address;
}
spring.xml
<bean id="student" class="com.hbb.entity.Student">
<property name="id" value="11"></property>
<property name="age" value="20"></property>
<property name="name" value="牛大壮"></property>
<property name="address" ref="address"></property>
</bean>
<bean id="address" class="com.hbb.entity.Address">
<property name="id" value="1001"></property>
<property name="name" value="日之出"></property>
</bean>
执行结果:Student(id=11, name=牛大壮, age=20,address=Address(id=1001, name=日之出))