** 什么是IOC?

一般的对象耦合是在编译时确定的,也就是说当我们写如下类:

public class StaticCoupling {

String s = new String("hzg1981");

}

的时候,类StaticCoupling在编译期间就跟String类耦合在了一起。 在代码静态分析时,就可以确认它们之间的耦合。

而IOC 则是在运行期间才使用assembler object绑定需要耦合的对象。绑定过程是由依赖注入(DI)实现的。需要注意的是IOC和DI是有区别的。IOC是一种设计范式(design paradigm),IOC是依赖于DI的,DI用来实现IOC。 Dependency injection is a pattern used to create instances of objects that other objects rely on without knowing at compile time which class will be used to provide that functionality.

也就是说,DI是一种可以实现IOC的设计模式。DI不是唯一可以实现IOC的设计模式,有以下三种三种设计模式可以实现IOC设计范式:

1 工厂模式: factory pattern

2 服务定位器模式:service locator pattern

3  依赖注入模式。依赖注入又可以分为三种类型: 构造函数注入(constructor injection)  Setter注入(setter injection)   以及借口注入(interface injection)

** ioc的简单实现

什么是DI机制? (DI = IOC, Dependence Injection, Inverse of control)

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色

需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中

创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者

因此也称为依赖注入。

为什么说IOC很简单呢?说白了其实就是由我们平常的new转成了使用反射来获取类的实例,相信任何人只要会用java的反射机制,那么自己写一个IOC框架也不是不可能的。

……

public ObjectgetInstance(String className) throws Exception

{

Object obj = Class.forName(className).newInstance();

Method[] methods = obj.getClass().getMethods();

for (Method method : methods) {

if (method.getName().intern() == "setString") {

method.invoke(obj, "hello world!");

}

}

}

……

上面的一个方法我们就很简单的使用了反射为指定的类的setString方法来设置一个hello

world!字符串。其实可以看到IOC真的很简单,当然了IOC简单并不表示spring的IOC就简单,spring的IOC的功能强大就在于有一系

列非常强大的配置文件维护类,它们可以维护spring配置文件中的各个类的关系,这才是spring的IOC真正强大的地方。在spring的Bean

定义文件中,不仅可以为定义Bean设置属性,还支持Bean之间的继承、Bean的抽象和不同的获取方式等等功能。

** Spring中的IOC

ICO容器(Container): The org.springframework.beans.factory.BeanFactory interface is the central IoC container interface in Spring.

参考文献:

http://howtodoinjava.com/2013/03/19/inversion-of-control-ioc-and-dependency-injection-di-patterns-in-spring-framework-and-related-interview-questions/

http://www.informit.com/articles/article.aspx?p=174533

http://javabeginnerstutorial.com/spring-framework-tutorial/spring-aopaspect-oriented-programming/

http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html

原文:http://www.cnblogs.com/hzg1981/p/5018319.html

java spring server_java server之spring中的IOC如何用java实现?相关推荐

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

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

  2. eclipse java 测试_测试:LR中使用Eclipse来进行Java程序的测试方法

    LR中使用Eclipse来进行Java程序的测试方法: http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7 ...

  3. 17下列命令中_哪个命令是java的编译命令?,下列命令中,哪个命令是Java的编译命令?A.java cB.javaC.java docD.applet viewer...

    下列命令中,哪个命令是Java的编译命令?A.java cB.javaC.java docD.applet viewer 更多相关问题 疯狂老鼠的刹车装置主要安装在轨道和站台. 当观览车运转中突然停电 ...

  4. java 模拟登陆 post_Java开发网 - 高手帮忙啊 (如何用java模拟post方式进行登陆论坛?)...

    于 2003-05-03 02:51 请教高手 我如何用java模拟post方式进行登陆论坛? 我先 URLConnection uc=htpurl.openConnection(); uc.setD ...

  5. spring用xml还是java_Spring中如何混用XML与Java装配方式

  6. java 获取jtextfield_如何获取JTextField中的字符数? - java

    是否有关于如何计算JTextField中输入字符的事件? 参考方案 您可以使用从JTextComponent继承的方法getText()检索字段的当前字符串值(取决于您的上下文,为NullPointe ...

  7. excel中的宏如何用java表示_一文看懂RPA与Excel宏的区别

    RPA和Excel宏(Macro)都能自动执行日常办公任务,节约时间成本,提高工作效率.那么,它们之间有何区别? Excel宏是什么? Excel中的宏是一种记录任务的功能.它会记住一系列任务步骤,并 ...

  8. java 怎样展示二维画矩阵图_如何用java绘制矩阵的图

    展开全部 如果读取得到的二维数组 ,存储的是每个像素的颜色值32313133353236313431303231363533e59b9ee7ad9431333365656565 , 那么很简单, 可以 ...

  9. java上机实验作业 编写汽车类car_请问如何用Java编写一个汽车类Car

    展开全部 public class Car { private String color;//颜色 private inte69da5e6ba90323131333532363134313032313 ...

最新文章

  1. ORB_SLAM2代码阅读(4)——LoopClosing线程
  2. 代码改动两三行,AI数据秒换隐身衣!隐私计算+AI?中科院博士实践分享一键切换...
  3. python从入门到精通视频教程百度云-python从入门到精通视频教程百度云资源
  4. 为什么 char 数组比 String 更适合存储密码?
  5. python pool_派松水潭(Python Pool)
  6. C# ASP.NET MVC 微信和支付宝H5支付开发及Demo
  7. 柱状图用腻了?玉玦图给你更美的数据呈现
  8. 物流机器人小车的运动控制与定位
  9. C语言栈的面试题,[面试题]EMC易安信-C语言函数堆栈的思考
  10. 百度手机输入法中的五笔9键盘有问题?
  11. C++编码实现定时任务执行功能
  12. 如何用计算机求矩阵的逆矩阵,逆矩阵的求法
  13. MS Sql server 日期转换为特定字符串格式
  14. 生产企业原材料订购与运输的研究-数据处理课程设计
  15. 浅谈OpenNI之我见
  16. 五点三次平滑法滤波 C 和 matlab代码
  17. Unity发布小游戏(六):小游戏的运行与测试
  18. Task02:baseline学习及改进
  19. 社区保密计算机使用制度,社区保密制度
  20. 聊天消息敏感词屏蔽系统(字符串替换 str.replace(str1, *) )

热门文章

  1. 记git升级版本之后出现fatal: NullReferenceException encountered问题
  2. 子类调用父类的构造函数几种情况
  3. 如何理解 RxJS?RxJS的中文API和使用教程
  4. seaJS 模块加载过程分析
  5. C++ 内存分配 学习笔记
  6. 如何部署windows服务?
  7. 【iOS开发】使用iFrameExtractor实现视频直播
  8. 《Linux就该这么学》培训笔记_ch18_使用MariaDB数据库管理系统
  9. selenium——元素的定位
  10. C/C++ 位域总结