spring IOC详解

这篇具有很好参考价值的文章主要介绍了spring IOC详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、IOC
IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
下面我们以几个例子来说明什么是IoC。假设我们要设计一个Girl和一个Boy类,其中Girl有kiss方法,即Girl想要Kiss一个Boy。那么,我们的问题是,Girl如何能够认识这个Boy?
spring IOC详解,spring,spring,java,后端,IOC,控制反转,面向对象

在我们中国,常见的MM与GG的认识方式有以下几种:1青梅竹马;2亲友介绍;3父母包办。 那么哪一种才是最好呢?

青梅竹马:Girl从小就知道自己的Boy。
spring IOC详解,spring,spring,java,后端,IOC,控制反转,面向对象

public class Girl { 

	void kiss(){
	
		Boy boy = new Boy();
	
	}

}

然而从开始就创建的Boy缺点就是无法在更换。并且要负责Boy的整个生命周期。如果我们的Girl想要换一个怎么办?(笔者严重不支持Girl经常更换Boy)

亲友介绍:由中间人负责提供Boy来见面

public class Girl {

	void kiss(){
	
		Boy boy = BoyFactory.createBoy(); 
	
	}

}

亲友介绍,固然是好。如果不满意,尽管另外换一个好了。但是,亲友BoyFactory经常是以Singleton的形式出现,不然就是,存在于Globals,无处不在,无处不能。实在是太繁琐了一点,不够灵活。我为什么一定要这个亲友掺和进来呢?为什么一定要付给她介绍费呢?万一最好的朋友爱上了我的男朋友呢?

父母包办:一切交给父母,自己不用费吹灰之力,只需要等着Kiss就好了。

public class Girl {

	void kiss(Boy boy){
	
		// kiss boy 
	
		boy.kiss();
	
	}

}

Well,这是对Girl最好的方法,只要想办法贿赂了Girl的父母,并把Boy交给他。那么我们就可以轻松的和Girl来Kiss了。看来几千年传统的父母之命还真是有用哦。至少Boy和Girl不用自己瞎忙乎了。

这就是IOC,将对象的创建和获取提取到外部。由外部容器提供需要的组件。

我们知道好莱坞原则:“Do not call us, we will call you.” 意思就是,You, girlie, do not call the boy. We will feed you a boy。

我们还应该知道依赖倒转原则即 Dependence Inversion Princinple,DIP。Eric Gamma说,要面向抽象编程。面向接口编程是面向对象的核心。
spring IOC详解,spring,spring,java,后端,IOC,控制反转,面向对象

组件应该分为两部分,即Service, 所提供功能的声明Implementation, Service的实现好处是:多实现可以任意切换,防止 “everything depends on everything” 问题.即具体依赖于具体。

所以,我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话,还可以kiss可爱的kitten和慈祥的grandmother。
二、IOC的type

IoC的Type指的是Girl得到Boy的几种不同方式。我们逐一来说明。
IOC type 0:不用IOC

public class Girl implements Servicable {

	private Kissable kissable;
	
	public Girl() {
	
		kissable = new Boy();
	
	}

	public void kissYourKissable() {
	
		kissable.kiss();
	
	}

}

Girl自己建立自己的Boy,很难更换,很难共享给别人,只能单独使用,并负责完全的生命周期。

IOC type 1,先看代码:

public class Girl implements Servicable {

	Kissable kissable;
	public void service(ServiceManager mgr) {
	
		kissable = (Kissable) mgr.lookup(“kissable”);
	
	}
	
	public void kissYourKissable() {
	
		kissable.kiss();
	
	}

}

这种情况出现于Avalon Framework。一个组件实现了Servicable接口,就必须实现service方法,并传入一个ServiceManager。其中会含有需要的其它组件。只需要在service方法中初始化需要的Boy。另外,J2EE中从Context取得对象也属于type 1,它依赖于配置文件:

IOC type 2:

IOC type 3

public class Girl {

	private Kissable kissable;
	
	public void setKissable(Kissable kissable) {
	
		this.kissable = kissable;
	
	}
	
	public void kissYourKissable() {
	
		kissable.kiss();
	
	}

}

Type 2出现于Spring Framework,是通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。

public class Girl {

	private Kissable kissable;
	
	public Girl(Kissable kissable) {
	
		this.kissable = kissable;
	
	}
	
	public void kissYourKissable() {
	
		kissable.kiss();
	
	}

}

这就是PicoContainer的组件 。通过构造函数传递Boy给Girl。

PicoContainer container = new DefaultPicoContainer();

container.registerComponentImplementation(Boy.class);

container.registerComponentImplementation(Girl.class);

Girl girl = (Girl) container.getComponentInstance(Girl.class);

girl.kissYourKissable();

Well,以上的这些理论部分有些已经有了新的定义了。过些天我会再写一些文章具体说明。比如,原来的三种type结构现在已经重新定义为依赖注射的许多层次。

IoC很年轻,还在发展。伴随着IOC的发展,AOP,COP,SOP等等都在不断的发展。作为程序员,随时关注着新的思想的发展是一件很轻松愉快的事情。有没有人愿意和我一起探讨学习共同进步呀!文章来源地址https://www.toymoban.com/news/detail-518106.html

到了这里,关于spring IOC详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring IoC (控制反转)

    IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使

    2024年02月13日
    浏览(37)
  • spring--Ioc控制反转/DI依赖注入

    1.概念:在使用对象的时候,由主动的new转换为外部提供对象,将对象创建的控制权交给外部,即控制反转 2.spring提供了一个容器,称为IOC容器,用来从当ioc中的外部 3.被管理或者被创建的对象在ioc中被叫做bean 使用步骤 1.导入依赖 spring-context 依赖,用到xml文件就需导入 2.创建

    2024年02月12日
    浏览(39)
  • 深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓

    在本文中,我们将介绍 IoC (控制反转)和 DI (依赖注入)的概念,以及如何在 Spring 框架中实现它们。 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。 与传统编程相比,传统编程中我

    2024年02月04日
    浏览(55)
  • 【Spring进阶系列丨第二篇】Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)

    我们都知道Spring 框架主要的优势是在 简化开发 和 框架整合 上,至于如何实现就是我们要学习Spring 框架的主要内容,今天我们就来一起学习Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)。 以经典的三层架构MVC作为案例,以前我们都是这么干的,看如下代码: 按照

    2024年02月05日
    浏览(66)
  • Spring6-IoC(Inversion of Control)控制反转和DI(Dependency Injection)依赖注入,手动实现IOC

    Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的 反射机制 。简单来说, 反射机制指的是程序在运行时能够获取自身

    2024年02月09日
    浏览(59)
  • Go中的控制反转 IoC

    控制反转 是一种解耦思想,将原本耦合在 业务逻辑 中的 控制逻辑 单独拆出来实现,不再让 业务逻辑 在处理业务的同时还要去实现 控制逻辑 ,而是专注处理业务。在 业务逻辑 代码中耦合进 控制逻辑 ,会导致在编写业务逻辑时需要处理业务之外的事,而且 控制逻辑 耦合

    2024年03月12日
    浏览(37)
  • IOC控制反转--.net framework

    分层架构: 传统工艺:会有依赖,上端全部展示细节 依赖于抽象:左边依赖倒置,面向抽象 实现类继承接口,实现类实现接口的方法 左边抽象,右边实现类 BaseBll.cs (ZhaoxiFramework.BLL) 调用 第三方工厂 IPhone.cs(ZhaoxiFramework.Interface) ObjectFactory.cs(ZhaoxiFramework.IOC.Project)

    2024年02月16日
    浏览(43)
  • 从依赖倒置原则到IOC控制反转实现

    从依赖倒置原则(Dependency Inversion Principle, DIP)到控制反转(Inversion of Control, IoC)再到依赖注入(Dependency Injection, DI)的演进过程,我们可以理解为一种逐步抽象和解耦的设计思想。这种思想在C#等面向对象的编程语言中得到了广泛的应用。 首先,让我们回顾一下依赖倒置原

    2024年04月24日
    浏览(53)
  • Spring IOC容器:让Java对象的管理和配置更简单

    在Java开发中,我们经常需要创建和使用各种Java对象,例如实体类,服务类,控制器类等。这些对象之间通常存在着一定的依赖关系,例如一个服务类可能需要调用另一个服务类或一个数据访问类的方法。为了创建和使用这些对象,我们通常需要做以下几件事: 在代码中通过

    2024年02月11日
    浏览(38)
  • CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知识对您有所提示,同时欢迎交流和指正 作者:aierong 出处:https://www.cnblogs.com/aierong     CommunityToolkit.Mvvm包不提供ioc功能,但是官方建议使用:Microsoft.Extensions.DependencyInject

    2023年04月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包