Spring 5框架教程(二):IOC

文章目录

一、IOC的概念和原理

1.什么是IOC

  • 控制反转:IOC,翻译过来就是控制反转,就是把对象创建和对象之间的调用过程都交给Spring进行管理。
  • 目的:降低耦合

2.IOC的底层原理

  技术支持:xml解析、工厂模式(设计模式的一种)、反射

(1)工厂模式

  假设有两个类,UserService类和UserDao类,我们想要在UserService中调用一个UserDao的方法,传统做法如下。这样的弊端就是,类之间的耦合度高。

	class UserService{
		execute(){
		UserDao userDao=new UserDao();
		userDao.add();
	}

	class UserDao{
		add(){
		}
	}

  如果采用工厂模式,如下,耦合度有所降低,但工厂类和UserDao类依旧存在耦合。

	class UserService{
		execute(){
			UserDao userDao=UserFactory.getDao();
			userDao.add();
	}

	class UserDao{
		add(){
		}
	}

	class UserFactory{//用这个类统一创建对象
		public static UserDao getDao(){
			return new UserDao();
		}
	}

(2)IOC的解耦过程

  为了进一步将耦合度降到最低限度,我们在利用了xml解析、工厂模式、反射的原理基础上,引入了IOC技术。

  步骤如下:

  • 在xml文件中配置创建的对象
	<bean id="dao" class="com.wang.UserDao"></bean>
  • 已有Service类和Dao类,现在要创建工厂类
	class UserFactory{
		public static UserDao getDao(){
			String classValue=class属性值;//通过xml解析获取class属性值,这一步还需要展开
			Class class=Class.forName(classValue);//通过反射创建对象
			return (UserDao)class.newInstance();//完成了反射创建对象
		}
	}

(3)IOC接口

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

  Spring中提供IOC容器两种实现方式:

  • BeanFactory接口:IOC容器最基本的方式(Spring自带的),一般只内部使用,不提供我们这些开发人员使用。特点是:加载配置文件时不会创建对象,而是获取对象、使用对象时才创建对象。
	BeanFactory context=new ClassPathXmlApplicationContext("bean1.xml");
  • ApplicationContext接口:是BeanFactory的子接口,功能更强大,是推荐使用的。特点是:加载配置文件时(启动服务器时)就创建对象。
	ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
  • BeanFactory接口下面还有一个ConfigurableApplicationContext子接口,有一些扩展的功能,可以了解一下。

(4)ApplicationContext接口的实现类

  • FileSystemXmlApplicationContext类:参数为xml文件的绝对路径
  • ClassPathXmlApplicationContext类:参数为xml文件的项目相对路径
上一篇:.net5 core webapi项目实战之十三:日志处理


下一篇:03_IOC本质推导