什么是IoC?

IoC即Inversion of Control,反应过来就是控制反转。啥是控制反转啊?控制反转指的就是将对象的创建权反转给(交给)了Spring,其作用是实现了程序的解耦合。也可这样解释:获取对象的方式变了,对象创建的控制权不是"使用者",而是"框架"或者"容器"。用更通俗的话来说,IoC就是指对象的创建,并不是在代码中用new操作new出来的,而是通过Spring进行配置创建的。

Spring的IoC的底层实现原理

这里先给出结论:Spring的IoC的底层实现原理是工厂设计模式+反射+XML配置文件。 就拿持久层(也即dao层,data access object,数据访问对象)的开发来说,官方推荐做法是先创建一个接口,然后再创建接口对应的实现类。所以,这里,我会以dao层的开发为例来证明Spring的IoC的底层实现原理就是工厂设计模式+反射+XML配置文件。首先,创建一个Userdao接口。

public interface UserDao {public void add();
}

然后,再创建Userdao接口的一个实现类(UserDaoImpl.java)。

public class UserDaoImpl implements UserDao {public void add() {balabala......}
}

这时我们便可发现一个缺点:service层和dao层耦合度太高了,即接口和实现类有耦合(它俩之间的联系过于紧密),一旦切换底层实现类,那么就需要修改源代码,这真的不是一个好的程序设计,好的程序设计应当满足OCP原则(也即开闭原则),即在尽量不修改程序源代码的基础上对程序进行扩展。说到这里,我就不得不稍微讲一下面向对象设计的七大原则了,它不必强记,重在理解。

出现的这个问题该如何解决呢?解决方法是使用工厂设计模式进行解耦合操作。所以,我们需要创建一个工厂类,在工厂类中提供一个方法,返回实现类的对象。

public class BeanFactory {// 提供返回实现类对象的方法public static UserDao getUserDao() {return new UserDaoImpl();}
}

这样,在service层中调用dao层的核心代码就变为了下面的样子。

UserDao dao = BeanFactory.getUserDao();
dao.add();

如若这样做,会发现又产生了一个缺点:现在接口和实现类之间是没有耦合了,但是service层和工厂类耦合了。如果真正想实现程序之间的解耦合,那么就需要使用到工厂设计模式+反射+XML配置文件了。所以,我们这里提供一个XML配置文件,并且该配置文件中有如下配置信息。

<bean id="userDao" class="com.meimeixia.dao.impl.UserDaoImpl" />

然后再来创建一个工厂类,在工厂类中提供一个返回实现类对象的方法,但并不是直接new实现类,而是使用SAX解析配置文件,根据标签bean中的id属性值得到对应的class属性值,使用反射创建实现类对象。

public class BeanFactory {public static Object getBean(String id) {// 1.使用SAX解析得到配置文件内容// 直接根据id值userDao得到class属性值String classvalue = "class属性值";// 2.使用反射得到对象Class clazz = Class.forName(classvalue);UserDaoImpl userDaoImpl = (UserDaoImpl)lazz.newInstance();return userDaoImpl;}
}

以上就是Spring的IoC的底层实现原理。

IOC概述及其实现原理相关推荐

  1. [Spring5]IOC容器_底层原理

    IOC的概念和原理 什么是IOC 1.控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 2.使用IOC目的:为了耦合度减低 IOC底层原理 xml解析 工厂模式 反射 底层原理示例图 ...

  2. IOC容器(底层原理解读)

    IOC的概念和原理 目录 IOC的概念和原理 1.什么是IOC (1)控制反转: (2)使用IOC的目的:降低耦合度 (3)IOC解耦过程图解 2.IOC的底层原理 3.IOC接口 (1)IOC思想 ...

  3. VLAN、Trunk概述和三层交换机原理

    VLAN.Trunk概述和三层交换机原理 一.VLAN概述 1.1VLAN的概念及优势 1.2静态VLAN 1.3静态VLAN的配置 二.VLAN Trunk 2.1Trunk 概述 2.2 Trun ...

  4. ISP(图像信号处理)算法概述、工作原理、架构、处理流程

    目录 ISP的主要内部构成:ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构:1.ISP逻辑    2.运行在其上的firmware ISP上的Firmwar ...

  5. 第30课时_电力MOSFET开关概述及工作原理

    第30课时_电力MOSFET开关概述及工作原理 MOSFET的工作原理 正向阻断 反向导电 形成反型层 导电沟道形成

  6. Animation动画概述和执行原理

    动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...

  7. ACL 概述及工作原理

    ACL 概述及工作原理 1.ACL访问控制列表 ACL的两种作用: 用来对数据包做访问控制(丢弃或者放行) 结合其他协议,用来匹配范围 访问控制列表 读取第三层,第四层包头信息 根据预先定义好的规则对 ...

  8. Spring框架学习-Spring和IOC概述

    一:什么是Spring框架? spring是一个分层的javase/EEfull-stack(一站式)轻量级的java开源框架.是为了解决企业开发的复杂性而创建的.框架的主要优势是分层架构,Sprin ...

  9. Spring框架中IoC(控制反转)的原理

    一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...

最新文章

  1. opencv获取图像像素值的坑
  2. 教你利用python 的单人AI 扫雷游戏
  3. JBPM对象主键生成机制
  4. playbook核心元素之 模板template 介绍(7)
  5. php ldap 创建用户,PHP LDAP获取作为组成员的成员的用户详细信息
  6. Visual Studio Code设置中文包/配置中文语言
  7. 超详细 1小时学会Python输入和输出!
  8. Yarn 资源调度框架
  9. HDOJ 1896 Stones
  10. 为什么说微服务一定要有 API 网关?
  11. shell 操作(四)
  12. Javascript:运行机制与原理
  13. C++线程和Java线程的对比
  14. 网页分享至Facebook,Twitter,LinkedIn,WhatsApp,邮箱总结
  15. MOV格式视频转MP4
  16. 苹果开发者账号续费相关问题
  17. c#窗体设计 鼠标靠近 控件显示 提示 备注 信息
  18. mysql查询当前时间的前后几天时间
  19. 快速部署PHP Web环境(docker nginx php mysql redis)
  20. iPhone系统升级后怎么恢复以前的系统

热门文章

  1. 教育硬件产品换届:C端战火纷飞,B端渐入佳境
  2. OSChina 周六乱弹 —— 我读书少你别骗我!【多图】
  3. 数组nums包含从0到n的所有整数,但其中缺了一个。请找出那个缺失的整数。
  4. buuctf-MISC篇做题笔记(2)
  5. 侯捷C++复现 :explicit在构造函数中
  6. Flutter组件--卡片效果(card组件)
  7. Linux删掉一级目录,linux命令删除文件夹
  8. 苹果官方要求在iOS App中提供帐户删除选项
  9. 整形二维数组中求最大值Max,行(row)和列(colum)。
  10. 数据:政府区块链项目采购上半年同比增长67%