2020/4/10 Spring IoC DI工作机制

IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。

DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是通过注入的方式进行创建。

 那么IOC和DI这两者又是什么关系呢?

IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。

IoC

1. 先写一个userDao接口,再写一个实现类实现这个方法。
2. 通过applicationContext.xml文件创建一个id为userDao的Bean。
3. 在测试类中调用say()方法。
public class TestIoC {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext applicationContext =
				new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过容器获取userDao实例
		UserDao userDao=(UserDao) applicationContext.getBean("userDao");
		//调用say()方法
		userDao.say();
	}
}

其中ClassPathXmlApplicationContext会寻找指定的xml文件,并装载完成xml文件的实例化工作。
创建Spring容器后,通过Object getBean(String name)来获取指定的Bean,需要强制转换。

DI

1. 将id为userDao的Bean实例注入到userService实例。
<bean id="userDao" class="com.woongcha.ioc.UserDaoImpl" />
	<!--添加一个id为userService的实例 -->
	<bean id="userService" class="com.woongcha.ioc.UserServiceImpl">
	<!-- 将id为userDao的Bean实例注入到userService实例中 -->
	   <property name="userDao" ref="userDao" />
	</bean>	
</beans>
2. 编写测试类。
public class TestDI {
	public static void main(String[] args) {
			//初始化Spring容器,加载配置文件
			ApplicationContext applicationContext =
					new ClassPathXmlApplicationContext("applicationContext.xml");
			//通过容器获取UserService实例
			UserService userService=
					(UserService) applicationContext.getBean("userService");
			//调用实例中的say()方法
			userService.say();
	}
}

Spring框架的优点:
1. 降低了组件之间的耦合性。
2. 使应用程序代码对框架的依赖最小化。
3. 提供了对AOP(Aspect Oriented Programming,面向切面编程)的支持。
4. 方便测试Spring程序。
5. 通过配置就可以完成对事务的管理,无需手动编程。
6. 方便集成各种优秀的框架。
7. 提供了封装,使API应用难度降低。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值