IOC的本质

简介: 说到IOC,可能很多学过Spring框架的小伙伴们能说出很多,但是很少有人知道它到底是怎么样出现在这个世界上的,又或者说这个IOC到底是经历过怎样的过程才被设计出来的呢?

耦合与内聚

首先,我们需要从耦合与内聚这2个点开始说起,这跟IOC出现的原因有很大的关系,了解过一定规范的小伙伴应该知道,我们在写代码的过程当中,最好要避免高耦合这个点,因为当高耦合出现时,也就是代码之间的间隙是非常紧凑的,经常会出现变更一个点的情况下,其他的点也需要变更,那么这对维护其实是一件非常恐怖的事情.

image.png


举例一个比较常见的场景:

UserServiceImpl

publicclassUserServiceImpl {

   publicvoidsave(){

   UserDaouserDao=newUserDaoImpl();

   // UserDao userDao = new UserDaoImpl2();

   userService.save();

   }

}

UserDaoImpl

publicclassUserDaoImplimplementsUserDao {

   publicvoidsave(){

   System.out.println("dao原始实现类");

   }

}

UserDaoImpl2

publicclassUserDaoImpl2implementsUserDao {

   publicvoidsave(){

   System.out.println("dao新的实现类");

   }

}

在上面的代码当中,我们发现如果我们需要修改dao层的实现类,那么业务层的dao可能也要随之发生更改,这就是最简单的高耦合案例,可能很多童鞋现在看起来挺简单的改一处就好,但是在实际开发当中,我们可能就不止改一处了.

工厂模式的诞生

在这种情况下,我们的工厂模式诞生了.

image.png

UserServiceImpl

publicclassUserServiceImpl {

   publicvoidsave(){

   UserServiceuserService=UserServiceFactory.getInstane();

   userService.save();

   }

}

UserDaoFactory

publicclassUserDaoFactory {

   publicstaticUserDaogetInstane(){

   returnnewUserDaoImpl();

       //只需要修改返回值即可完成全局的修改,相对上一种方法来说 只需修改一处代码

   }

}

UserDaoImpl

publicclassUserDaoImplimplementsUserDao {

   publicvoidsave(){

   System.out.println("dao原始实现类");

   }

}

UserDaoImpl2

publicclassUserDaoImpl2implementsUserDao {

   publicvoidsave(){

   System.out.println("dao新的实现类");

   }

}

但是,还能不能再次变的更简单呢?

答案是可以的!

接下来就轮到我们今天的主题IOC重磅登场了!

Spring雏形模式

image.png

image.png

image.png

上面这三步不仅是Spring一步步慢慢进化的本质,也是人类思想的变迁,主流框架或许会变,但是我觉得如果我们能够多掌握一些底层的话,那也能够做到所谓的无招胜有招吧,这是一段学习的过程,借此分享给大家!

目录
相关文章
|
XML Java 应用服务中间件
面试官问我咋实现Spring框架IOC和DI好吧打趴下,深度解析手动实现Spring框架的IOC与DI功能
面试官问我咋实现Spring框架IOC和DI好吧打趴下,深度解析手动实现Spring框架的IOC与DI功能
81 0
|
存储 Java Spring
深入解析Spring框架的核心:BeanFactory体系结构探究
深入解析Spring框架的核心:BeanFactory体系结构探究
171 0
|
3月前
|
XML Java 数据库
Ioc原理
Ioc原理
47 0
|
Java Spring 容器
面试官问我咋实现Spring框架IOC和DI好吧打趴下,深度解析手动实现Spring框架的IOC与DI功能2
面试官问我咋实现Spring框架IOC和DI好吧打趴下,深度解析手动实现Spring框架的IOC与DI功能2
54 0
|
7月前
|
设计模式 容器
如何理解IOC中的反射操作
如何理解IOC中的反射操作
|
缓存 Java Spring
30个类手写Spring核心原理之Ioc顶层架构设计(2)
Annotation的代码实现我们还是沿用Mini版本的,保持不变,复制过来便可。
75 0
|
XML 图形学 数据格式
IOC控制反转——基础概念与实例
IOC控制反转——基础概念与实例
|
XML Java 数据格式
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
126 0
|
自动驾驶 小程序 Java
请解释下Spring框架中的IoC?
请解释下Spring框架中的IoC?
请解释下Spring框架中的IoC?
|
缓存 Oracle 安全
对控制反转理解不深?带你手写一个基于注解的IOC容器 加深对spring底层代码的理解
对控制反转理解不深?带你手写一个基于注解的IOC容器 加深对spring底层代码的理解
对控制反转理解不深?带你手写一个基于注解的IOC容器 加深对spring底层代码的理解