spring之控制反转(IOC)与依赖注入(DI)

本文介绍了Spring框架如何通过控制反转(IoC)和依赖注入(DI)降低对象之间的耦合度。在传统模式下,调用者直接创建被调用者对象,而在Spring中,对象实例化由Spring容器负责,通过setter方法或构造器注入实现依赖关系。通过示例展示了如何在XML配置文件中定义Bean并进行依赖注入,从而在测试类中获取并使用注入的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当某个Java对象(调用者)需要调用另一个Java对象(被调用者,即被依赖对象)时:
在传统模式下,调用者通常会采用“new被调用者”的代码方式来创建对象,
这种方式会导致调用者与被调用者之间的耦合性增加,不利于后期项目的升级和维护

在使用了Spring框架之后,对象的实例不再由调用者来创建,
而是由spring容器来创建,spring容器会负责控制程序之间的关系,
而不是由调用者的程序代码直接控制。

这些,控制权由应用代码转移到了spring容器,控制权发生了反转,这就是spring的控制反转

从spring容器的角度来看,spring容器负责将被依赖对象赋值给调用者的成员变量,
这相当于为调用者注入了它依赖的实例,这就是spring的依赖注入。

依赖注入的两种实现方式,
属性setter方法注入
构造方法注入

//定义一个UserService 接口
public interface UserService {

	public void say();
}
//编写一个UserDaoImpl 实现类
public class UserDaoImpl implements UserDao{

	@Override
	public void say() {
		System.out.println("userdao说Hello World!!");
	}
}
//在applicationContext.xml中实例化Bean
<!-- 添加一个id为userService的实例 -->
	<bean id="userService" class="com.daier.ioc.UserServiceImpl">
	<!-- 将id=userDao的Bean实例注入到userService实例中 -->
	<property name="userDao" ref="userDao" />
	</bean>
//编写测试类TestDI
public static void main(String[] args) {
		//1.初始化spring容器,加载配置文件
		@SuppressWarnings("resource")
		ApplicationContext applicationcontext=
				new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过容器获取UserService实例
		UserService userService=
				(UserService) applicationcontext.getBean("userService");
		//调用实例中的say方法
		userService.say();
		/**
		 * userdao说Hello World!!
		 * userService说 Hello World!!
		 */
	}


<!-- 将id=userDao的Bean实例注入到userService实例中 -->
    <property name="userDao" ref="userDao" />
<property>时<bean>元素的子元素
用于调用Bean实例中的setUserDao()方法完成属性赋值,从而实现依赖注入。
name属性表示bean实例中的相应的属性名,ref属性用于指定其属性值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值