Spring的依赖注入DI

依赖注入:它与控制反转的含义相同,只不过这两个称呼是从两个角度描述同一个概念。可以这样理解DI的概念:如果一个对象A需要使用另一个对象B才能实现某个功能,这时就说A对象依赖于B对象,而spring容器创建A对象,会自动将A对象需要的B对象注入到A对象中,此过程就是依赖注入。

依赖注入的作用就是使用Spring框架创建对象时,动态地将其所依赖的对象注入到Bean组件中。
依赖注入有三种实现方式:setter注入、构造方法注入、接口注入(Spring容器不支持接口注入)。

1.setter注入(在实际开发中,通常使用):指IoC容器使用setter方法来注入依赖的实例。通过调用无参构造器或无参static工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter的DI。
2.构造方法注入:指IoC容器使用构造方法来注入被依赖的实例。基于构造器的DI通过调用带参数的构造方法来实现,每个参数代表一个依赖。

利用setter注入方法的实例:

UserService.Java

package cn.ioc;
public interface UserService {
 public void addUser();
}
UserServiceImpl.java

package cn.ioc;
public class UserServiceImpl implements UserService {
	//使用UserDao接口声明一个对象
	private UserDao userDao;
	//添加UserDao对象的set方法,用于依赖注入
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	//实现userService中的方法
	@Override
	public void addUser() {
		this.userDao.save(); 
		//调用UserDao中的save()方法
		System.out.println("spring:hello user Service");
	} 
}


在applicationContext.xml中的配置

<?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 
  http://www.springframework.org/schema/beans/spring-beans.xsd">
  	<!-- 将指定对象配置给spring,让spring创建其实例 -->
  	<bean id="userDao" class="cn.ioc.UserDaoImpl"></bean>
  	<!-- 注册vyige名称为userService实例中-->
 	 <bean id="userService" class="cn.ioc.UserServiceImpl">
  	<!-- 将userDao实例注入到userService实例中 -->
	  <property name="userDao" ref="userDao"></property>
 	 </bean>
</beans>
TestApp中
package cn.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestApp {
@Test
	public void demo1(){
		//1.定义配置文件路径(此处代表在类路径中)
		String xmlPath = "applicationContext.xml";
		//2.初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//3.通过容器获取userDao实例
		UserDao userDao = (UserDao) applicationContext.getBean("userDao");
		//4.调用userDao的save()方法
		userDao.save();
	}
/**
	@Test
	public void demo2(){
		//1.定义配置文件路径(此处代表在类路径中)
		String xmlPath = "applicationContext.xml";
		//2.初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//3.通过容器获取userDao实例
		UserService userService =  (UserService) applicationContext.getBean("userService");
		//4.调用userDao的save()方法
		userService.addUser();
	}
**/
}
控制台输出
spring: hello user dao
spring: hello user Service









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值