Spring IoC 学习(1)

基本概念

IoC是什么?

如果这个问题要是面试的问题,那么我会这么回答。

IoC(Inversion of Control 控制反转),当然它还有另一个名字,DI(Dependency Injection 依赖注入)。这两个名称其实实质上指的都是同一样的东西。只不过看问题的角度是不一样的。IoC指的是,原来我们需要获得一个对象(Object)的时候,我们的第一想法就是用new。搭配下图,效果更好。

现在我们不用new了,是别人给我们的。既然是别人给的,那么,别人可以给,也可以不给。主动权这个时候,肯定就不在我们自己的手里了,在别人的手里了。所以,名叫IoC,控制反转。

为什么要使用IoC?

至于为什么要使用IoC,不用自己new,我说说自己的看法。

Person person= new Asian("Alibaba");

看看,上面的代码可以看出,我们需要一个Person,这个person,我们选择new出来。但实际上new的不是Person本身,而是其继承类,Asian。那如果有一天这个叫Alibaba的亚洲人,不这么想了。程序需要更精确些。是不是要改成下面这样的。

Person person=new Chinese("Alibaba");

那如果改的地方其实还挺多的呢,我们的应用还大呢?【一般公司的应用,都不会小】你还一个个去new,去改吗?

这时候就体现出IoC的优势了,即别人帮你管要new的东西,在Spring的配置文件里面改就好了,给你的这部分代码是不用改的。我们来看看

//读取bean.xml中的内容
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//创建bean的引用对象
Person p = ctx.getBean("person");

当然,以上的代码并不难,实际中,我们很有可能也不这么用。但是,本质的意思总归是这个意思的。

我说了这么多,其实就只为了体现一个IoC的优势。

==资源集中管理,实现资源的可配置和易管理。==

第二个优势,看下面两张图


这是我画的有关IoC Provider与其他POJO类的关系图,其实本来,Person拥有Pets,Person和Pets都拥有Life是一件再平常不过的事儿。所以原来他们的关系是很紧密的,后来有了IoC Provider之后,就把这三者紧密联系的类分开了。而且,其实分的很开。

你要问,这又有什么优势?看来还是不行啊,还是要整代码。

Person person= new Asian("Alibaba");
person.setPet=new Dog("Lili");
person.setLife=new Life("good");

那我dog改成cat呢,Life改成bad呢?代码的耦合性很强,一个改,个个改。这不就很麻烦吗?如果把bean的管理都交给IoC,那就是IoC帮你管,要变化,IoC变化了之后再给你。不就不用你操心了吗?这还不算优势吗?

优势总结

1、 资源集中管理,实现资源的可配置和易管理。

2、降低了使用资源双方的依赖程度,解耦。

以上总结来自 https://www.zhihu.com/question/23277575

感谢

各位朋友,请原谅一只小菜鸟写的入门文章及感悟,若有不足请指出。

时间: 2024-11-03 18:56:37

Spring IoC 学习(1)的相关文章

Spring IoC 学习(2)

前言 知道了IoC的好处和优势之后,本来应该有的一步是,搞清楚怎么用.因为前面我写的顺序是:是什么,为什么?下一个part肯定的就是怎么办或者怎么用?但是,按照Spring的官方的Guide,我觉得应该大家是可以写个Hello World.网上这类的教程也很多,加上其实我这次学习Spring是想更加深入的学习,因此,重点就不放在这个部分了.主要放在学习背后的故事. 这小节的内容就是学习IoC的容器. 两种容器 概述 整个IoC容器可以分为两个阶段,容器启动阶段和实例化阶段. 容器启动阶段 ①就是

Spring IoC 学习(3)

前言 前面因为总结的累了,把IoC的两个步骤,只写了一半,就仅仅把容器启动的方面说了说,对于实例化的阶段,我前面并没有说,在这节中,准备讲一讲,实例化阶段. 生命周期 基础生命周期简图 这个部分,其实实例化,一般都是用反射或者cglib,底层封装的也比较深,我随着代码debug的过程中,也没有接触到这个部分.但是在实例化bean的过程中,还是看到了挺多东西. 生命周期的图,基本上有可能是以下这种 从图中可以看到,在这个阶段,最重要的不是实例化本身,而是实例化前后会做的一些操作.实例化有些不同的,

Spring IoC 学习(4)

前言 前面的三篇文章,主要用BeanFactory介绍了Spring中IoC容器的两个阶段:容器启动阶段和实例化阶段.接下来的这篇文章主要说的是Spring的统一资源定位策略. Spring为什么要整这个 写下这篇文章之前的绝大部分时间,我都在思考,为什么要整这个功能.任何一个功能.实现肯定有其道理.那道理是什么呢?有人是这么解释的: 要搞清楚Spring为什么提供这么一个功能,还是从Java SE提供的标准类java.net.URL说起比较好.URL全名是Uniform Resource Lo

谈谈对Spring IOC的理解

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinniansh

spring IOC容器实现探讨

   spring IOC容器的实现,一开始我被复杂的接口和类所掩埋,看不清整体的思路和设计,踟蹰于代码丛林中,摸不清前进的方向.一开始我就决定只研读以xml文件做配置文件的XmlFactoryBean的具体实现为主要目标,渐渐地有了点感觉,用UML把spring中的bean工厂体系展现出来之后就更清晰了,让你不得不感叹设计的精巧和复杂.本文只是我个人对spring IOC实现的理解,如有错误,请不吝赐教,谢谢.     首先,需要理解的是spring容器中bean的生命周期,<spring i

利用Spring IOC技术实现用户登录验证机制_java

利用 Spring IOC 技术实现用户登录的验证机制,对用户进行登录验证. 首先利用 Spring 的自动装配模式将 User 对象注入到控制器中,然后将用户输入的用户名和密码与系统中限定的合法用户的用户名和密码进行匹配. 当用户名与密码匹配成功时,跳转到登录成功页面:当用户名与密码不匹配时,跳转到登录失败的页面. 1.创建 User 对象,定义用户名和密码属性,代码如下: package com.importnew; public class User { private String us

《Spring攻略(第2版)》——第1章 Spring简介 1.1实例化Spring IoC容器

第1章 Spring简介 在本章中,你将参加关于Spring.核心容器以及容器所提供的一些全局可用设施的一个速成班(或者一次复习),你还将了解Spring XML配置格式,以及注释驱动的支持.本章将带给你应付本书余下部分中引入的概念所需要的知识.你将学习Spring IoC容器中的基本组件配置.在Spring框架的核心部分,IoC容器的设计具有高度的适应性和可配置性,提供了使你的组件配置尽可能简单的一组工具.你能够很简单地设置运行于Spring IoC容器中的组件. 在Spring中,组件也被称

Spring IoC[控制反转]

近段时间正在学习spring.对于spring IOC发表一下自己的见解 1 spring IoC 1.1 什么是IoC 控制反转(Inversion of Control,英文缩写为IoC).主要是用来降低程序之间耦合度的一种方式. 1.2 IoC主要形式 ◇依赖查找:容器提供回调接口和上下文条件给组件.组件就必须使用容器提供的API来查找资源和协作对象,容器将调用这些回调方法,从而让应用代码获得相关资源. ◇依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系.容器全权负

spring ioc

spring ioc是spring的核心之一,也是spring体系的基础,那么spring ioc所依赖的底层技术是什么的?反射,以前我们开发程序的时候对象之间的相互调用需要用new来实现,现在所有的bean都是通过spring容器来管理.这样做有什么好处呢?解耦!以前程序直接的调用用new直接给写死了,现在我们可以通过注入不同的接口实现类来完成对象直接的调用.   首先来聊聊Java的反射机制 1.反射机制的作用:   反编译:.class-->.java   通过反射机制访问java对象的属