依赖注入:
依赖指的是对象和对象之间的关联关系
注入指的是一种数据传递行为,通过注入的行为来让对象和对象产生关系
依赖注入实现的两种方式:
set注入
构造方法注入
省略接口:
package com.powernode.spring6.dao;
public class UserDao {
public void insertUser(){
System.out.println("执行插入语句");
}
}
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();
}
}
想让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">
<property name="userDao" ref="userDao">property>
bean>
@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();
}
执行成功!
set注入的核心实现原理:通过反射机制调用set方法来给属性赋值,让两个对象之间产生关系
核心原理:通过构造方法来给属性赋值
public class UserDao {
public void insertUser(){
System.out.println("执行插入语句");
}
}
public class UserService {
private UserDao userDao;
//使用构造方法
public UserService(UserDao userDao) {
this.userDao = userDao;
}
//set注入的话必须提供一个set方法
//spring容器会调用这个set方法,来给userDao属性赋值
public void saveUser(){
userDao.insertUser();
}
构造方法注入:
指定构造方法的第一个参数,下标是0
可以不使用index 也可以根据参数的名字来配置
<bean id="userDao" class="com.powernode.spring6.dao.UserDao">bean>
<bean id="userService" class="com.powernode.spring6.service.UserService">
<constructor-arg index="0" ref="userDao">constructor-arg>
bean>
@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();
}
执行成功!
set注入的核心实现原理:通过反射机制调用set方法来给属性赋值,让两个对象之间产生关系