IOC(Inversion of Control)通俗讲就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。IoC另一个名叫:“依赖注入(Dependency Injection)”。
IOC容器是管理对象与对象之间的依赖关系。
如果在A类内部使用B类方法,如果是在A类内部直接new个B类,这样A类就对B类产生依赖关系,以后修改它是麻烦的事。如果让IOC容器把B 类注入进去,那么想要什么东西,就让IOC容器注入什么东西。这样一来,依赖少了,程序更加灵活了,更加体现了JAVA的抽象的概念。
用稍带色彩的故事讲解:spring 控制反转 -> spring 注射
有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女。
皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女。
其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上。
这就是控制反转,而把美女送到皇帝的寝宫里面去就是注射。
理解
太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙床上去。整个后宫可以看成是IOC框架,美女就是IOC控制下的JavaBean。
用故事比较ejb和spring
传统的模式就是一个饥渴男去找。小。姐。出台,找领班,帮助给介绍一个云云,于是领班就开始给他张罗介绍一个合适的给他,完事后,再把小姐还给领班,下次再来这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐这就是lookup()方法,领班手中的小姐名录就是JNDI小姐就是EJB,饥渴男是客户端,青楼是EJB容器。
这就是区别:饥渴男去找。小。姐。出台很麻烦,不仅得找,用完后还得把小姐给还回去。而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了而不是皇帝,必要时候由太监给注射进去就可以了。控制反转与依赖注入
本站原创,转载请标明:来自蔡傑儒博客(http://www.cnblogs.com/cxy0703/)