set注入:
通俗易懂的讲就是通过set方法实现的一种注入方式
首先新建一个Maven项目
打开idea——》file——》new——》Project,进入如下界面
创建完成如图:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tedu</groupId>
<artifactId>spring04</artifactId>
<version>1.0-SNAPSHOT</version>
<name>spring04</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring的依赖项-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
<build>
</build>
</project>
项目结构:
dao层
这个包名和类名、方法名可以随意定,为了set注入
public class UserDao {
public void show(){//测试方法
System.out.println("我是userDao....");
}
}
service层
首先定义了一个UserDao
然后提供set方法
定义普通的字符串和整型也可以进行set注入
import cn.tedu.dao.UserDao;
public class UserService {
private UserDao userDao;
/*set方法注入
* 需要给属性字段提供set方法*/
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//字符串类型
String name;
//整型
Integer age;
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void show(){
System.out.println("我是userService....");
userDao.show();
System.out.println("名字:"+name+",年龄:"+age);
}
}
spring-config.xml
首先定义一个bean对象UserDao,id是bean对象的唯一标识符userDao,class是bean(需要被实例化的bean对象)的全路径(包名+类名)
然后通过bean再定义一个UserService,将UserDao注入到UserService中
<?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">
<bean id="userDao" class="cn.tedu.dao.UserDao"/>
<bean id="userService" class="cn.tedu.service.UserService">
<!--set方法注入,通过property属性实现set注入
name:属性字段名
ref:对应bean标签的id属性值
value:具体的值-->
<property name="userDao" ref="userDao"/>
<property name="name" value="王向东"/>
<property name="age" value="20"/>
</bean>
</beans>
测试层:
import cn.tedu.service.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
public static void main(String[] args) {
//加载多个配置文件
BeanFactory factory = new ClassPathXmlApplicationContext("spring-config.xml");
//2.通过getBean方法调用spring-config.xml配置文件中的id属性为userService的bean
//使用空构造实例化
UserService userService = ( UserService) factory.getBean("userService");
//3.调用方法
userService.show();
}
}
运行结果