IOC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IOC容器),是框架共有的特性。

对于IOC的理解,可以把IOC看作是一个生产和管理bean对象的容器。原本程序中我们要手动自己创建(new)的对象统统交给Spring的IOC容器帮我们创建。同时这就意味着,要产生的单例的bean,这个对象的生命周期也是有IOC容器管理。

Spring中IOC的三种实现方式:

1.属性注入,或叫做set方法注入;
2.构造方法注入;
3.注解注入,可能因为方便的原因,这种方式免去了臃肿的配置,所以比较常用。

Spring的有点主要是根据IOC和AOP实现的,之前有简单提到AOP的实现思想,这些都是针对工厂模式和代理模式的友好封装。IOC主要解决了代码的高度耦合问题,AOP将面向切面的编程思想做出了最好的解释和应用。

这里顺带简单解释一下Spring中的IOC,DI,AOP:

       IOC就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。在实际应用中,Spring通过配置文件(xml或者properties)指定需要实例化的java类(类名的完整字符串),包括这些java类的一组初始化值,通过加载读取配置文件,用Spring提供的方法(getBean())就可以获取到我们想要的根据指定配置进行初始化的实例对象。

       AOP就是将程序功能中的频繁出现或者与主业务逻辑代码相关度不高的代码抽离出来,通过切面编程的方式在想要调用的时候引入调用的思想。而这种思想并不是只限于Spring和java,AOP(面向切面)和OOP(面向对象)一样都是一种编程思想,这种思想的实现机制在Spring中便是应用了java的动态代理和java的反射。在实际编程中,我们通常会遇到一些交叉业务逻辑(比如:日志,事务,安全等等),这是我们就可以封装一个封面,然后注入到目标对象(具体的业务逻辑)中去。ps:很多方法都会抛出异常信息,这是我们就可以写一个拦截器,在这个类中实现记录错误日志的功能,再在Spring的xml配置文件中配置一个对这些要记录日志的方法的AOP拦截器,在这个方法执行后调用这个拦截器来记录日志。这样就不用每次抛出异常都要手动的去单独处理记录,提高了程序的内聚性。这种在调用某个方法之前/后想要自动执行一系列自定义操作的就是AOP思想。
总结:

IOC即控制反转,一种将控制权转移的设计模式,由传统的程序控制转移到容器控制;

DI即依赖注入,将相互依赖的对象分离,在Spring的配置(注解)中描述它们之间的依赖关系,这些依赖关系也只在使用时才被建立。

AOP即面向切面,一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。

Spring的AOP和IOC都是为了解决代码的耦合度的实际应用,使得代码的重用度变高,便于维护。但这些都不是Spring中特有的,我们可以说Spring将它们应用的更灵活。

引用前者:络庆钟朔

IOC和DI,AOP的本质理解的更多相关文章

  1. Spring IOC DI AOP 的简单理解及应用

    Spring两大特性:IOC 和AOP.IOC 控制反转,AOP 面向切面编程 spring 核心容器的主要组件时Bean工厂(BeanFactory) ,Bean 工厂使用控制反转模式来降低程序代码 ...

  2. spring面试题 对DI , AOP概念的理解

    1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监 ...

  3. 对IOC和DI以及AOP的理解

    为了理解Spring的IoC与DI从网上查了很多资料,作为初学者,下面的描述应该是最详细,最易理解的方式了. 首先想说说IoC(Inversion of Control,控制倒转).这是spring的 ...

  4. 初步理解IOC和DI和AOP模式

    初步理解IOC和DI和AOP模式 控制反转(IOC) 控制反转(IOC,Inversion of Control)是一种转主动为被动关系的一种编程模式,有点类似于工厂模式,举个栗子, 下面这个这不是I ...

  5. SSM框架中IoC、DI与AOP的理解

    框架封装了普通项目中程序员需要重复书写的代码和调用过程,就比如说在传统的jsp项目中,我们的controller接收到前端的请求然后程序员就需要去开发Dao层,里面还涉及数据库的连接和存储过程的代码, ...

  6. 沉淀再出发:IoC和AOP的本质

    沉淀再出发:IoC和AOP的本质 一.前言 关于IoC和AOP这两个概念,如果我们没有深入的理解可以说是根本就不理解Spring这个架构的,同样的由Spring演变出来的Spring Boot和Spr ...

  7. Spring自学教程-IOC、DI、AOP(二)

    一.spring的IOC-就是怎样使用spring来创建对象 二.springDI(依赖注入)-就是怎样给属性赋值 通过set方式赋值 以下我们只需要记住两点的赋值,基本类型和引用类型的赋值 基本类型 ...

  8. 黑马-Spring(IOC&DI) AOP

    IOC(控制翻转) 概念 把对象的创建.初始化.销毁等工作交给spring容器来做 案例 环境 步骤 1.  写一个HelloWorld类 2.  写一个配置文件   把hello类放到spring容 ...

  9. Spring(一)——IOC和DI的简单理解

    Spring是一个IOC(DI)和AOP容器框架,并且是开源的. 1.IOC和DI 比较官方的说法: •IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找 ...

随机推荐

  1. 取消select默认样式

    /*清除select默认样式*/select { border: solid 1px #CACDD0; appearance:none; -moz-appearance:none; -webkit-a ...

  2. 0x04 MySQl 表操作

    0x01 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:http://www.cnblogs.com/linhaifeng/articles/7213670.ht ...

  3. 2. 安装 Kerberos

    2.1. 环境配置 安装kerberos前,要确保主机名可以被解析. 主机名 内网IP 角色 Vmw201 172.16.18.201 Master KDC Vmw202 172.16.18.202 ...

  4. vnc server配置、启动、重启与连接

    目前有两种比较流行的方式:XDM(X display manager)方案和VNC方案,而我个人比较倾向于VNC方案,一是因为VNC方案配置起来相对比较容易,二是VNC方案支持多种连接方式,比如通过浏 ...

  5. 部署Jenkins+docker集成环境

    环境: 主机(mac osx)和虚拟机(Ubuntu 16.04) mac osx系统,运行Jenkins Ubuntu16.04系统,运行docker(用Ubuntu14.04镜像创建一个docke ...

  6. 根据URL请求 返回XML字符串

    public static string GetHttpResponse(string url) { string content = ""; // Create a new Ht ...

  7. Manacher专题

    1.POJ 3974 Palindrome 题意:求一个长字符串的最长回文子串. 思路:Manacher模板. #include<iostream> #include<algorit ...

  8. 类百度DOC编辑区域

    .mainarea{ position:absolute; top:151px; width:100%; bottom:0px; } .edit_wrap{ background:#fcfcfc; p ...

  9. Matlab命令合集 妈妈再也不用担心我不会用matlab了

    matlab命令 一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变 ...

  10. 028_MapReduce中的计数器Counter的使用

    一.分析运行wordcount程序屏幕上打印信息 ##运行wordcount单词频率统计程序,基于输出输出路径. [hadoop@hadoop-master hadoop-1.2.1]$ hadoop ...