文章目录
- 前言
- 一、set注入
- 1.1 UserDao类:
- 1.2 UserService类:
- 1.3 spring.xml配置文件:
- 1.4 测试类:
- 1.5 执行结果:
- 二、构造方法注入
- 2.1 UserDao
- 2.2 UserService类:
- 1.3 spring.xml配置文件:
- 2.4 测试类:
- 2.5 执行结果
- 总结
前言
依赖注入:
依赖指的是对象和对象之间的关联关系
注入指的是一种数据传递行为,通过注入的行为来让对象和对象产生关系
依赖注入实现的两种方式:
set注入
构造方法注入
一、set注入
省略接口:
1.1 UserDao类:
package com.powernode.spring6.dao;
public class UserDao {
public void insertUser(){
System.out.println("执行插入语句");
}
}
1.2 UserService类:
package com.powernode.spring6.service;
import com.powernode.spring6.dao.UserDao;
public class UserService {
private UserDao userDao;
//这个set方法非常重要
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//set注入的话必须提供一个set方法
//spring容器会调用这个set方法,来给userDao属性赋值
public void saveUser(){
userDao.insertUser();
}
}
1.3 spring.xml配置文件:
想让spring调用对应的set方法,需要配置property标签
name属性的值:set方法的方法名去掉set后的一堆拿过来,第一个字母改为小写
ref的值:ref后面指定的是要注入的bean的id
<bean id="userDao" class="com.powernode.spring6.dao.UserDao"></bean>
<bean id="userService" class="com.powernode.spring6.service.UserService">
<!--想让spring调用对应的set方法,需要配置property标签-->
<!--name属性的值:set方法的方法名去掉set后的一堆拿过来,第一个字母改为小写-->
<property name="userDao" ref="userDao"></property>
</bean>
1.4 测试类:
@Test
public void testFirstSpringCode2(){
//第一步:获取spring容器对象
//ApplicationContext翻译为应用上下文。其实就是spring容器
//ApplicationContext是一个接口
//ClassPathXmlApplicationContext 专门从类路径当中加载spring配置文件的对象
//解析spring配置文件 启动了spring容器 并且实例化所有的bean对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
//第二步:根据bean的id从spring容器中获取这个对象
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.saveUser();
}
1.5 执行结果:
执行成功!
set注入的核心实现原理:通过反射机制调用set方法来给属性赋值,让两个对象之间产生关系
二、构造方法注入
核心原理:通过构造方法来给属性赋值
2.1 UserDao
public class UserDao {
public void insertUser(){
System.out.println("执行插入语句");
}
}
2.2 UserService类:
public class UserService {
private UserDao userDao;
//使用构造方法
public UserService(UserDao userDao) {
this.userDao = userDao;
}
//set注入的话必须提供一个set方法
//spring容器会调用这个set方法,来给userDao属性赋值
public void saveUser(){
userDao.insertUser();
}
1.3 spring.xml配置文件:
构造方法注入:
指定构造方法的第一个参数,下标是0
可以不使用index 也可以根据参数的名字来配置
<bean id="userDao" class="com.powernode.spring6.dao.UserDao"></bean>
<bean id="userService" class="com.powernode.spring6.service.UserService">
<!--
构造方法注入:
指定构造方法的第一个参数,下标是0
-->
<constructor-arg index="0" ref="userDao"></constructor-arg>
</bean>
2.4 测试类:
@Test
public void testFirstSpringCode2(){
//第一步:获取spring容器对象
//ApplicationContext翻译为应用上下文。其实就是spring容器
//ApplicationContext是一个接口
//ClassPathXmlApplicationContext 专门从类路径当中加载spring配置文件的对象
//解析spring配置文件 启动了spring容器 并且实例化所有的bean对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
//第二步:根据bean的id从spring容器中获取这个对象
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.saveUser();
}
2.5 执行结果
执行成功!
总结
set注入的核心实现原理:通过反射机制调用set方法来给属性赋值,让两个对象之间产生关系