ioc是什么意思?IOC的原理及手动实现

访客3年前关于黑客接单924

ioc是什么意思(IOC的原理及手动实现)导语

Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。也是几乎所有Java工作者必须要掌握的框架之一,其优秀的设计思想以及其代码实现上的艺术也是我们需要掌握的。

要学习Spring,除了在我们的项目中使用之外,也需要对它的源码进行研读,但是Spring的实现涵盖的知识很多,在加上其中的类的数量也是非常的多,在我们阅读源码时可能会在几十个类之间穿插阅读,很有可能一不小心就导致思维混乱。

有鉴于此,我这里先对Spring中的几个重要的模块进行一个手动的简易实现,一是熟悉这些模块的原理,同时也是仿造Spring中的结构来对后面阅读源码打下基础。

IOC(Inversion of Control)

Inversion of Control即控制反转,其意思是将我们之前由客户端代码来创建的对象交由IOC容器来进行控制,对象的创建,初始化以及后面的管理都由IOC完成。

IOC的好处

解耦:IOC的出现解决了类与类之间的耦合,我们在Web开发的Servlet时代,如果一个Servlet需要依赖另一个类的某些实现,那么我们需要在当前类对依赖的类进行创建和初始化,如果其他类也依赖了这个类,那也需要进行创建和初始化,而交给了IOC来管理的话,那么在需要的时候只需向IOC进行申请,而不需要重复的创建和初始化。当然,IOC也允许每次都重新创建一个新的对象。

方便与AOP进行配合:AOP也是一个使用十分频繁的功能,通过IOC可以十分方便的与AOP进行配合。

IOC中设计的设计模式

工厂模式。IOC容器来负责创建管理类实例对象,在需要时向IOC进行申请,从IOC中获取。所以IOC容器也称为bean工厂。

工厂模式是一种比较简单易懂的设计模式,这里就不在介绍了,如果有需要的可以看看工厂模式。

IOC的手动实现

Bean定义

IOC的主要的功能便是对Bean进行管理,包括创建、初始化、管理以及销毁的工作。首先我们面对的问题就是我们怎么让IOC能够创建一个Bean?为了创建Bean我们需要提供一些什么?

如何创建Bean

在不手动通过new关键字创建的情况下创建类实例的对象 *** 有两种:

  • 反射:通过反射的 *** 可以创建类的实例:clazz.getClass().newInstance();。
  • 工厂模式:工厂模式可以让我们在不接触实例类的情况下创建出实例。
publicclassPersonFactory{publicPersongetPerson(){returnnewPerson();}}

为了创建Bean我们需要提供什么

通过分析上面的两种 *** 可以轻松得出答案。

对于反射的方式我们仅需提供实例的Class对象。

对于工厂 *** 我们需要提供的就是创建该类的工厂名(factoryName)和 *** 名(methodName);

除了创建bean还需要做些什么

IOC容器是对bean的整个生命周期进行管理,除了创建之外还需要对bean进行初始化,以及不需要时对bean进行销毁的工作(如释放资源等)。所以我们还需要提供初始化和销毁等操作。

到这里创建bean需要的基本分析完了,看类图:

理解Spring:IOC的原理及手动实现

 

Bean工厂

Bean的定义解决了,但是这个bean定义以及创建好的Bean实例放在哪里呢,我们需要一个统一的地方来存放这些东西以方便我们要用的时候方便取。

我们定义一个Bean工厂来存放bean,在需要的时候从bean工厂中取即可,bean工厂对外提供的也仅仅是一个获取bean的 *** 即可,由于bean的类型不定,所以返回值定位Object。

理解Spring:IOC的原理及手动实现

 

注册Bean定义

到了现在我们有了创建bean的Bean定义,有了存放和管理bean的Bean工厂,现在需要考虑的是怎么来联系这两个类,我们还需要另外一个接口,接口的功能是让我们能注册和获取bean定义,这里我们通过beanName来区分不同的bean。

理解Spring:IOC的原理及手动实现

 

代码实现

到这里我们实现一个简易的IOC容器的需要的东西基本准备完成了,看下基本类图:

理解Spring:IOC的原理及手动实现

 

基本代码实现:

DefaultBeanDefinition:

publicclassDefaultBeanDefinitionimplementsBeanDefinition{privateClass<?>clazz;privateStringbeanFactoryName;privateStringcreateBeanMethodName;privateStringstaticCreateBeanMethodName;privateStringbeanInitMethodName;privateStringbeanDestoryMethodName;privatebooleanisSingleton;//setterpublicvoidsetSingleton(booleansingleton){isSingleton=singleton;}@OverridepublicClass<?>getBeanClass(){returnthis.clazz;}@OverridepublicStringgetBeanFactory(){returnthis.beanFactoryName;}@OverridepublicStringgetCreateBeanMethod(){returnthis.createBeanMethodName;}@OverridepublicStringgetStaticCreateBeanMethod(){returnthis.staticCreateBeanMethodName;}@OverridepublicStringgetBeanInitMethodName(){returnthis.beanInitMethodName;}@OverridepublicStringgetBeanDestoryMethodName(){returnthis.beanDestoryMethodName;}@OverridepublicStringgetScope(){returnthis.isSingleton?BeanDefinition.SINGLETION:BeanDefinition.PROTOTYPE;}@OverridepublicbooleanisSingleton(){returnthis.isSingleton;}@OverridepublicbooleanisPrototype(){return!this.isSingleton;}}

DefaultBeanFactory:

 

理解Spring:IOC的原理及手动实现

 

 

理解Spring:IOC的原理及手动实现

 

 

理解Spring:IOC的原理及手动实现

 

 

理解Spring:IOC的原理及手动实现

 

 

理解Spring:IOC的原理及手动实现

 

简单测试一下:实例bean:

publicclassUser{privateStringname;privateintage;//gettersetterpublicvoidinit(){System.out.println("init...");}publicvoiddestory(){System.out.println("destory...");}}

工厂类:

publicclassTestFactory{publicObjectcreateMethod(){returnnewUser();}publicstaticObjectstaticCreateMethod(){returnnewUser();}}

测试类:

 

理解Spring:IOC的原理及手动实现

 

小结

一个简易的容器就这样实现了,当然我们这里只是具备了基本的功能,实际上还差的远,比如带参数的bean的实例化等功能。但是IOC的基本原理已经表达出来了,后面我们只需在这个基础上添加新的功能即可。

标签: 原理ioc

相关文章

激光电视拆解及工作原理是什么?

激光电视拆解及工作原理是什么?

在过去几年,随着移动互联网的普及,经常听到长辈说:“现在的人都不看激光电视了,拿手机就能看视频”。但实际上呢?几英寸的手机屏幕显然无法就承载用户对视听享受的高要求。再加上00后年轻人开始走上时代的...

scm是什么意思(scm的原理和作用是什么)

scm是什么意思(scm的原理和作用是什么)

供应链管理(Supply chain management,SCM)是一种集成的管理思想和方法,它执行供应链中从供应商到最终用户的物流的计划和控制等职能。从单一的企业角度来看,是指企业通过改善上、下游...

防弹玻璃是什么材料?防弹玻璃防护原理是什么

防弹玻璃是什么材料?防弹玻璃防护原理是什么

一些人会见到市场上有防弹玻璃售卖,防弹玻璃最大的好处是带来安全性,它属于特殊性质的玻璃,可以连子弹都防好,防弹玻璃防护原理是什么?一些富豪或是家里经济条件比较好,也需要在窗户上安装防弹玻璃,防弹玻璃品...

什么是臭氧?臭氧治疗的作用原理是什么?

什么是臭氧?臭氧治疗的作用原理是什么?

什么是臭氧(臭氧治疗的作用原理是什么?)臭氧是大气层的主要成分之一,多分布在10-50km高度的平流层大气中,极大值在20-30km高度之间。臭氧具有强氧化性,被用于漂泊、消毒、杀菌等,功效甚多。近年...

喷墨打印机维修技巧及原理有哪些!

喷墨打印机维修技巧及原理有哪些!

在工作中需要用到打印机,打印机的类型有许多,喷墨打印机在办公上也比较常用到。买回来的喷墨打印机在使用的过程中如果出现了故障,就需要进行维修,维修要掌握合适的方法。喷墨打印机故障怎么办及维修方法是什么呢...

pvc防静电地板防静电的原理是什么?今天终于明

pvc防静电地板防静电的原理是什么?今天终于明

很多场合对于地面的要求比较高,需要防静电。那么,什么是防静电PVC地板呢?防静电PVC地板为什么能防静电呢?下面我们一起来了解一下防静电PVC地板。 防静电PVC地板是当今世界上非常流行的一种新...