一直对于spring 的ioc的理论描述概念比较模糊,不能有一个系统的认识,于是这段时间通过翻阅书籍以及网上查询资料有了一个比较系统性的解释。
spring的ioc描述又名DI(Dependency Injection)依赖注入。其意思是将调用者需要的对象的依赖关系交由第三方进行管理,以及注入。
通过翻阅书籍理解IOC的原理是:将业务场景(business)、业务场景进行行为操作的人物(service(业务处理的处理对象))、最终进行业务操作的对象(bean)三者的关系进行形象的比喻
以张之亮的《墨攻》进行比喻:其中一个场景是,刘德华饰演的墨者革离到达梁国都城下时,城上梁国守军问道:“来者何人”刘德华回答:“墨者革离”,java语言通过这个“城门叩问”的场景编写剧本,并借此理解IOC的概念
在这个场景,通过引入导演这一角色,将场景,剧本角色,演员进行三者之间业务调度,实现各个业务模块之间的解耦。导演选择剧本、导演海选剧本的角色扮演者演员。
而ioc的核心理论是:控制、反转。
控制:指的是剧本选择GeLi的角色扮演者的控制权
反转:指的是将控制的权限从《墨攻》剧本中移除,并转交给导演
导演:拥有角色bean的控制管理权利(ioc容器),即导演进行演员bean的选择权(bean所注册的对象,类的全限定类名)、调度权(bean的注入),演员解约的权利(bean的销毁)
ioc通过其定义的注解,实现spring ioc容器在启动的时间实现bean的注册、实例化、注入
而控制反转的技术的实现,是基于java的反射机制进行架构实现的,因为在tomcat启动服务的时候,Java虚拟机会将项目中的各个class装载到jvm中,并且对于每个装载的class都有一个描述(全限定类名),在通过将全限定类名交给反射机制实现对类的控制(从而达到对类的实例化,方法的调用,属性的配置)