看了大神的解释感觉受益匪浅,所以就将其保存,方便自己看,并最后总结出自己的理解

1. IOC(Inverse of Control):控制反转,也可以称为依赖倒置。

所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果不倒置,意思就是A主动获取B的实例:B b = new B(),这就是最简单的获取B实例的方法(当然还有各种设计模式可以帮助你去获得B的实例,比如工厂、Locator等等),然后你就可以调用b对象了。所以,不倒置,意味着A要主动获取B,才能使用B;到了这里,就应该明白了倒置的意思了。倒置就是A要调用B的话,A并不需要主动获取B,而是由其它人自动将B送上门来。
        形象的举例就是:
        通常情况下,假如你有一天在家里口渴了,要喝水,那么你可以到你小区的小卖部去,告诉他们,你需要一瓶水,然后小卖部给你一瓶水!这本来没有太大问题,关键是如果小卖部很远,那么你必须知道:从你家如何到小卖部;小卖部里是否有你需要的水;你还要考虑是否开着车去;等等等等,也许有太多的问题要考虑了。也就是说,为了一瓶水,你还可能需要依赖于车等等这些交通工具或别的工具,问题是不是变得复杂了?那么如何解决这个问题呢?
        解决这个问题的方法很简单:小卖部提供送货上门服务,凡是小卖部的会员,你只要告知小卖部你需要什么,小卖部将主动把货物给你送上门来!这样一来,你只需要做两件事情,你就可以活得更加轻松自在:
        第一:向小卖部注册为会员。
        第二:告诉小卖部你需要什么。

这和Spring的做法很类似!Spring就是小卖部,你就是A对象,水就是B对象
        第一:在Spring中声明一个类:A
        第二:告诉Spring,A需要B

假设A是UserAction类,而B是UserService类

[html] view plaincopy
  1. <bean id="userService" class="org.leadfar.service.UserService"/>
  2. <bean id="documentService" class="org.leadfar.service.DocumentService"/>
  3. <bean id="orgService" class="org.leadfar.service.OrgService"/>
  4. <bean id="userAction" class="org.leadfar.web.UserAction">
  5. <property name="userService" ref="userService"/>
  6. </bean>

在Spring这个商店(工厂)中,有很多对象/服务:userService,documentService,orgService,也有很多会员:userAction等等,声明userAction需要userService即可,Spring将通过你给它提供的通道主动把userService送上门来,因此UserAction的代码示例类似如下所示:

[java] view plaincopy
  1. package org.leadfar.web;
  2. public class UserAction{
  3. private UserService userService;
  4. public String login(){
  5. userService.valifyUser(xxx);
  6. }
  7. public void setUserService(UserService userService){
  8. this.userService = userService;
  9. }
  10. }

在这段代码里面,你无需自己创建UserService对象(Spring作为背后无形的手,把UserService对象通过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!),当然咯,我们也可以使用注解来注入。Spring依赖注入的实现技术是:动态代理

2. AOP:即面向切面编程

面向切面编程的目标就是分离关注点。什么是关注点呢?就是你要做的事,就是关注点。假如你是个公子哥,没啥人生目标,天天就是衣来伸手,饭来张口,整天只知道玩一件事!那么,每天你一睁眼,就光想着吃完饭就去玩(你必须要做的事),但是在玩之前,你还需要穿衣服、穿鞋子、叠好被子、做饭等等等等事情,这些事情就是你的关注点,但是你只想吃饭然后玩,那么怎么办呢?这些事情通通交给别人去干。在你走到饭桌之前,有一个专门的仆人A帮你穿衣服,仆人B帮你穿鞋子,仆人C帮你叠好被子,仆人C帮你做饭,然后你就开始吃饭、去玩(这就是你一天的正事),你干完你的正事之后,回来,然后一系列仆人又开始帮你干这个干那个,然后一天就结束了!

AOP的好处就是你只需要干你的正事,其它事情别人帮你干。也许有一天,你想裸奔,不想穿衣服,那么你把仆人A解雇就是了!也许有一天,出门之前你还想带点钱,那么你再雇一个仆人D专门帮你干取钱的活!这就是AOP。每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。

从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

3.IOC是一种叫做“控制反转”的设计思想和DI的使用场景。

1)、较浅的层次——从名字上解析 
“控制”就是指对 对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个对象(创建),在使用过程中保持引用(维护),在失去全部引用后由GC去回收对象(销毁)。 
“反转”就是指对 对象的创建、维护、销毁等生命周期的控制由程序控制改为由IOC容器控制,需要某个对象时就直接通过名字去IOC容器中获取。

2)、更深的层次——提到DI,依赖注入,是IOC的一种重要实现 
一个对象的创建往往会涉及到其他对象的创建,比如一个对象A的成员变量持有着另一个对象B的引用,这就是依赖,A依赖于B。IOC机制既然负责了对象的创建,那么这个依赖关系也就必须由IOC容器负责起来。负责的方式就是DI——依赖注入,通过将依赖关系写入配置文件,然后在创建有依赖关系的对象时,由IOC容器注入依赖的对象,如在创建A时,检查到有依赖关系,IOC容器就把A依赖的对象B创建后注入到A中(组装,通过反射机制实现),然后把A返回给对象请求者,完成工作。

3)、IOC的意义何在? 
IOC并没有实现更多的功能,但它的存在使我们不需要很多代码、不需要考虑对象间复杂的耦合关系就能从IOC容器中获取合适的对象,而且提供了对 对象的可靠的管理,极大地降低了开发的复杂性。

最后个人总结:

IOC(控制反转):就是将对象生命周期的控制反转过来,不需要主动的去创建操作,需要时会从IOC容器中取出,减少了开发者繁琐的创建过程

DI(依赖注入):也就是IOC的真正实现过程,IOC容器就把A依赖的对象B创建后注入到A中(组装,通过反射机制实现),然后把A返回给对象请求者,完成工作

AOP(面向切面编程):就是开发者直接对关注的重点就行操作,不需要对其他操作就行关注,例如事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务,所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务

谈谈Spring中的IOC、DI和AOP概念相关推荐

  1. 谈谈Spring中的IOC和AOP概念 - 倪升武的博客 - CSDN博客

    转载于https://blog.csdn.net/eson_15/article/details/51090040 IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解. 1. ...

  2. IOC/DI与AOP概念的理解

    想要了解更多,加QQ群72132378 IOC,控制反转的意思,DI是依赖注入 所谓控制反转,即依赖关系的获取方式(controll)反过来了.所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么 ...

  3. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心. 依赖注入(DI) ...

  4. 请简述什么是spring的ioc和di_理解Spring中的IoC和DI

    什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...

  5. java spring server_Java server框架之(1):spring中的IoC

    为什么需要IoC? 一般的对象耦合是在编译时确定的,也就是说当我们写如下类: 1 public classStaticCoupling { 2 3 String s = new String(&quo ...

  6. Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: Spring中的 ...

  7. java spring server_java server之spring中的IOC如何用java实现?

    ** 什么是IOC? 一般的对象耦合是在编译时确定的,也就是说当我们写如下类: public class StaticCoupling { String s = new String("hz ...

  8. 谈谈spring中的拦截器interceptor

    谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...

  9. Spring中的IOC介绍

    Spring中的IOC介绍 IOC(控制反转) IOC介绍 IOC是什么 IOC能做什么 Spring容器管理对象 1.maven管理依赖 2.给定容器的配置文件 3.IOC容器管理对象 4.通过容器 ...

最新文章

  1. SaaS项目管理软件有什么用?
  2. codeblocks、wxWidgets环境配置
  3. SQL PASS西雅图之行——Lake Union纪行
  4. 启明云端分享| IDO-SOM2D01-V1-2GW核心板SPI调试总结
  5. 40.QT-QPropertyAnimationdong和QParallelAnimationGroup动画实现
  6. Android学习一:文件操作
  7. 【渝粤教育】国家开放大学2018年秋季 8038-22T实用管理基础 参考试题
  8. SpringCloud的学习记录(1)
  9. 设置SSH免密码自动登录(使用别名)
  10. ab753变频器参数怎么拷贝到面板_变频器怎么设置参数?变频器的基本参数设定...
  11. pandas之Dataframe 菜鸟教程
  12. php phdfs扩展,hadoop HDFS的PHP扩展—PHDFS
  13. SWAT模型学习小技巧(一)
  14. 微信小程序提供 模板:template
  15. 微带滤波器摘要_微带低通滤波器的设计
  16. Python几十行代码轻松实现微信自动回复机器人
  17. 复杂性思维中文第二版 八、自组织临界
  18. 嵌入式系统 ---> 程序存储器和数据存储器
  19. 云服务器架设大话西游2,端游[大话西游]天演册虚拟机镜像一键启动服务端+客户端+GM工具等...
  20. 程序员:走路也可以帮你拥有完美的翘臀!

热门文章

  1. java毕业设计猎头公司业务管理系统的设计与实现源码+lw文档+mybatis+系统+mysql数据库+调试
  2. 机器学习深度学习数据集大汇总
  3. 对于通用计算机而言,MIT论文:通用计算机时代即将终结
  4. July, 19(R)
  5. ky使用教程(基于fetch的小巧优雅js的http客服端)
  6. R语言时间序列函数整理[不断更新]
  7. SWUST OJ 1168 喝可乐
  8. 全国所有飞机场机场信息
  9. 基于STM32单片机与wifi模块串口结合进行PC端或手机端无线通信(附项目资料包)
  10. Cisco CCNA系列课程学习