关于Spring的IOC

IOC(Inversion of Control)

  1. 概念:控制反转,把对象创建对象之间调用过程交给Spring管理
  2. 目的:降低耦合度
  3. 底层原理:xml解析、工厂模式、反射

老规矩,上代码

最开始我们一段程序的实现方法是这样的:

class Student{
	void add(){
		...
	}
}

class Teacher{
	void check(){
		//这是原本常规做法,实例化对象后调用方法
		Student student = new Student();
		student.add();
	}
}

但这么做会导致耦合度过高,所以引入工厂模式

就是加入一个Factory类

class Factory{
	public static Student getStudent(){
		return new Student();
	}
}

这样原本的方法就可以改进为

class Student{
	void add(){
		...
	}
}

class Teacher{
	void check(){
		Student student = Factory.getStudent();
		student.add();
	}
}

这样Teacher类在需要Student类中的方法时,就会由Factory类自动创建一个Student对象然后注入到Teacher需要的地方,即控制权在Factory手上,也就是控制反转

并且当你Student类做出改变时,不需要改动Teacher类,也就降低了耦合度。

但是这样的话Factory类和Student类的耦合度仍然过高,这是就出现了IOC

现在再来看IOC这个概念,我们的系统大多数都是由许多对象组成的,假设A对象需要B对象,那么A对象在初始化或运行到某一行时,程序需要主动去创建B对象,这时的控制权是在程序手上。在引入IOC容器后,可以切断A对象和B对象的联系,那么A对象需要B对象的时候,IOC容器就会主动创建一个B对象注入到A对象需要的位置。实际上这个控制权就从主动变为被动,也就是控制权颠倒过来了。

原先是我们写程序去控制创建对象,而现在这种控制反转的思想,我们不需要管理对象的创建了,这就是IOC的原型

IOC的过程

需要xml配置文件,配置创建的对象

<bean id="" class="类名路径">    </bean>

接下来在Factory类中解析xml配置文件通过类名路径反射出类对象

class Factory{
	public static Student getStudent(){
		String classvalue = class的属性值:类名路径;
		//反射创建对象
		Class class = Class.forName(classvalue);
		return (Student)class.newInstance();
	}
}

IOC接口

IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

Spring提供IOC容器实现两种方式:(两个接口)

(1)BeanFactory:IOC容器基本实现,Spring内部的使用接口;
加载配置文件时不会创建对象

(2)ApplicationContext:BeanFactory接口的子接口,提供更多功能
加载配置文件时就会创建配置文件对象

ApplicationContext实现类:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值