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

目录
打赏
0
0
0
0
4
分享
相关文章
深入解析Spring框架的核心:BeanFactory体系结构探究
深入解析Spring框架的核心:BeanFactory体系结构探究
202 0
面向方面编程(AOP)的概念
【8月更文挑战第22天】
105 0
如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
106 0
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以
144 0
浅谈NestJS设计思想(分层、IOC、AOP)
浅谈NestJS设计思想(分层、IOC、AOP) nestJS用了有一定时间了,当初学习node后端选择的第一个web框架,这篇文章将对NestJS框架层面的几个重要概念进行梳理,希望能加深记忆,融汇贯通,更进一步,本文阅读需要对nestJS有一定使用经验。
498 0
AOP 概念篇
Spring AOP 系列的第一篇 先介绍一下 AOP 相关的一些概念。
253 0
依赖注入?依赖注入是如何实现解耦的?
依赖注入?依赖注入是如何实现解耦的?
146 0
依赖注入?依赖注入是如何实现解耦的?
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等