IOC(Inversion of Control):控制反转。

*其他解释:依赖注入、依赖反转……

设计目标:简化JEE的研发工作,提供IOC容器,控制bean的生成、注入,解耦。

看了网上的一些帖子、介绍,书籍中的一些剖析,都不是很了解IOC这个概念,于是找来这么段代码,直接从代码上去理解了。

interface A{

}
public class B implements A { }

正常情况下,我们要使用到A接口的实现都是这样:

A a = new B();

但在IOC实现Spring中则是这样:

@Autowired
public A a;

也就是说,当你要应用不同的实现类的时候,你只需要去配置xml文件,或者修改@service的bean对象,如:

@Service
public class B implements A { }

改成

@Service
public class C implements A { }

而不需要这样子修改:

A a = new C();

这里不去探讨Spring是如何实现的,具体涉及到的反射相关名词,如有兴趣,自行学习。

我们只谈论这样子的好处,经常进行Ajax编程的人,或许对这样子的代码并不陌生:

$.post(url, function(data){
//
});

这里用到的是回调的设计模式,在java中这样的回调通常会与接口挂钩,即传进去的是一个接口实现类(因为java中的函数实现必须要挂载在对象上,而不像脚本语言可以进行函数式编程),所以前端代码中传递的就仅仅是一个匿名函数了,这样的好处就是当你实际运行的时候才去确定你所需要绑定的方法,而非耦合度高的编译时绑定或者硬编码。

实际上这对于Java这种强类型的接口编程语言是相当合适的,至少笔者认为这样可以指导初学者的编程,举个例子,在swing编程中的事件监听你只需要传一个接口实现类(里面对应的方法需要实现)进去即可,而不需要去编写相当复杂的代码逻辑,即把业务逻辑部分的代码抽离出来,让研发人员可以专注在业务逻辑的实现上。Spring很大程度上的一个设计目标就是如此。

IOC设计模式初步了解(day02)的更多相关文章

  1. 学习 IOC 设计模式前必读:依赖注入的三种实现

    一直以来就是越难的东西越值钱! 嘿嘿,这篇博文章转载自:http://www.cnblogs.com/liuhaorain/p/3747470.html 摘要 面向对象设计(OOD)有助于我们开发出高 ...

  2. java工厂设计模式初步

    没有利用反射机制定义的简单工厂类 interface Fruit{ public void eat(); } class Apple implements Fruit{ public void eat ...

  3. IOC AOP 设计模式

    IOC AOP 不是什么技术而是一种设计模式  学习 IOC AOP 其实是在学习一种思想. 1.IOC IOC其实是 将对象的创建和获取提取到外部.由外部IOC容器提供需要的组件. 看下面代码: p ...

  4. IoC概述

    ---------------siwuxie095 IoC,即 Inversion of Control,控制反转,它是 Spring 容器的内核 AOP.声明式事务等功能都是在此基础上开花结果,即 ...

  5. 我理解的IOC技术在Java和C#中比较分析

    一直想用心写这个系列的文章,其实看得越多,也就越觉得自己在这方面的功力太浅,也就越不想班门弄斧啦,作为一个开篇,我想把这个技术深层次化,在之前的.net的一个MVC系列文章其实已经涉及到了,只是.ne ...

  6. Spring IoC原理详解

    去掌握一门技术的时候,往往很多人都忽略了一点,只是一味地去写代码,原理层面的东西从来就不理会 还有就是学习的过程中,不去想为什么有了当前的写法,却有着这么一门技术可以代替它 一般来说,在写程序的时候, ...

  7. Castle框架中的IOC和AOP机制

    反转控制(IOC)和面向切面编程(AOP)技术作为当前比较流行的技术,其优势已受到广泛关注,但是这两项新技术在实际项目上的应用研究却很落后,而且在.NET平台下实现这两项技术没有形成可以广泛套用的框架 ...

  8. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理

    IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...

  9. IOC框架之Ninject 简介

    还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 上篇博客介绍了依赖注入的三种方式:构造方法注入,属性注入,接口注入!详情请参考 ...

随机推荐

  1. traditional:true

  2. 在iis中调试asp.net程序

    第一步,在iis中新建一个网站,名称为Langben,“物理路径”选择你的程序的根目录,端口你可以随便设置一个数,我这里设置为8888(后面要用到哦). 第二步,应用程序池设置一下 第三步,接下来,在 ...

  3. 使用HTML5中的Canves标签制作时钟特效

    <!DOCTYPE html > <html> <head> </head> <body> <canvas id="cloc ...

  4. HTML&CSS基础学习笔记1.16-单元格间距和表格主体

    上一篇讲html学习笔记,讲过了合并单元格,那么今天就来介绍下如何控制单元格的间距,以及表格主体的相关知识. 单元格间距 在上个知识点的显示结果中你可能发现了,单元格与单元格之间有一小段空白.这是由& ...

  5. PyQt4环境搭建与使用

    初次使用python写图形界面的工具时,用了Tkinter.wxpython,都是需要手写界面布局的,看api看的头疼觉得这样写太费劲了,于是搜了下看看别人都是怎样写python图形界面的. 在论坛上 ...

  6. 安装notepad++之后怎样在鼠标右键上加上Edit with notepad++

    在鼠标右键上加入使用notepad++编辑 我们在安装完notepad++文本编辑器之后,在一个文本文件上右键有时候并没有出现"使用notepad++编辑的选项",我们可以通过简单 ...

  7. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...

  8. javascript学习笔记——chrome等提示找不到“getElementsByTagName”的一种解决方法

    最近学习是写了一个小网页,前台有个下拉框是通过后天的xml配置的,在写好代码后使用发现在IE9以及之前的IE浏览器都可以正常获取,但是IE10,chrome和firefox都会在获取一个标签时报get ...

  9. 【转】ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等--wine

    原文网址:http://blog.csdn.net/hanmengaidudu/article/details/17616921 其实在这之前,试过无数次的wine模拟,没有一次成功的,也不能说是不成 ...

  10. Dynamic Binding & Static Binding

    Reference: JavaPoint BeginnerBook What is Binding Connecting a method call to the method body is kno ...