IOC概述及其实现原理
什么是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概述及其实现原理相关推荐
- [Spring5]IOC容器_底层原理
IOC的概念和原理 什么是IOC 1.控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 2.使用IOC目的:为了耦合度减低 IOC底层原理 xml解析 工厂模式 反射 底层原理示例图 ...
- IOC容器(底层原理解读)
IOC的概念和原理 目录 IOC的概念和原理 1.什么是IOC (1)控制反转: (2)使用IOC的目的:降低耦合度 (3)IOC解耦过程图解 2.IOC的底层原理 3.IOC接口 (1)IOC思想 ...
- VLAN、Trunk概述和三层交换机原理
VLAN.Trunk概述和三层交换机原理 一.VLAN概述 1.1VLAN的概念及优势 1.2静态VLAN 1.3静态VLAN的配置 二.VLAN Trunk 2.1Trunk 概述 2.2 Trun ...
- ISP(图像信号处理)算法概述、工作原理、架构、处理流程
目录 ISP的主要内部构成:ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构:1.ISP逻辑 2.运行在其上的firmware ISP上的Firmwar ...
- 第30课时_电力MOSFET开关概述及工作原理
第30课时_电力MOSFET开关概述及工作原理 MOSFET的工作原理 正向阻断 反向导电 形成反型层 导电沟道形成
- Animation动画概述和执行原理
动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...
- ACL 概述及工作原理
ACL 概述及工作原理 1.ACL访问控制列表 ACL的两种作用: 用来对数据包做访问控制(丢弃或者放行) 结合其他协议,用来匹配范围 访问控制列表 读取第三层,第四层包头信息 根据预先定义好的规则对 ...
- Spring框架学习-Spring和IOC概述
一:什么是Spring框架? spring是一个分层的javase/EEfull-stack(一站式)轻量级的java开源框架.是为了解决企业开发的复杂性而创建的.框架的主要优势是分层架构,Sprin ...
- Spring框架中IoC(控制反转)的原理
一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对 ...
最新文章
- opencv获取图像像素值的坑
- 教你利用python 的单人AI 扫雷游戏
- JBPM对象主键生成机制
- playbook核心元素之 模板template 介绍(7)
- php ldap 创建用户,PHP LDAP获取作为组成员的成员的用户详细信息
- Visual Studio Code设置中文包/配置中文语言
- 超详细 1小时学会Python输入和输出!
- Yarn 资源调度框架
- HDOJ 1896 Stones
- 为什么说微服务一定要有 API 网关?
- shell 操作(四)
- Javascript:运行机制与原理
- C++线程和Java线程的对比
- 网页分享至Facebook,Twitter,LinkedIn,WhatsApp,邮箱总结
- MOV格式视频转MP4
- 苹果开发者账号续费相关问题
- c#窗体设计 鼠标靠近 控件显示 提示 备注 信息
- mysql查询当前时间的前后几天时间
- 快速部署PHP Web环境(docker nginx php mysql redis)
- iPhone系统升级后怎么恢复以前的系统