思考之spring的ioc
来源:互联网 发布:最强网络土豪系统 编辑:程序博客网 时间:2024/06/06 08:29
控制反转 英语:Inversion of control,缩写为IoC
我想很多同学都会思考过这样的一个问题,控制反转,什么地方反转了,是不是翻译的不对?
这里插一句
当年马云借着盖茨的嘴说:“互联网会改变世界。”其实是他自己说的,因为那时侯没有人认识马云,如果我说是翻译错误,大家肯定拍砖说我没理解。
大家对spring都用了很多年,有喜欢看书的同学一定会看到过spring 技术内幕,非常棒的一本书,没看的看过这篇博客之后记得买一本。
细心的同学可能会记得这样一句话
早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论,他为控制反转创造了一个更好的名字:依赖注入。--摘自维基百科
其实他真的翻译的不够友好,所以后来才有了依赖注入(Dependency Injection,简称DI)。其实他们说的是一个意思。
bean的历史及工场模式:
最原始的bean是直接new出来的,后来出来了工场,把所有的bean放到工厂里统一生产,但还是写new,只不过这个new放在一个方法里了。再后来就是依赖注入帮了我们大忙,我们看不见new了。其实spring ioc就是一个大工厂 BeanFactory
有好多同学说过接口有什么用?我不用接口一样写代码,我不用spring一样new.
OOP的三个特性是封闭继承和多态,三个特性,继承和多态就占了两个,学java的人都应该看think in java。里面也强调了代码复用的三个方式是组合,继承和代理。这六点其实非常重要。
think in java引入过一个名词叫做"客户端程序员",其实我们所有应用框架的人都是客户端程序员,那么框架的设计的要想到可扩展性和代码的复用性以及兼容性。想想spring就很容易理解,这些都需要接口。
有接口就会有多态,有多态就需要修改new后边的代码,如果这些写到代码里,很多的话,重构就会带来问题。这是第一点;其二通过ioc可以实现bean的统一管理,很方便,对bean的依赖关系一目了然,很容易把握全局,利于分析。所以ioc确实是非常有用的,是很棒的思想。
从字面上理解,两个词,一个是依赖一个是注入。
谭浩强说过这样一句话:“程序=算法+数据结构”
所以分析Ioc我们从数据结构入手。它实际上有一个beanDefinition 的定义类,要实现注入首先我们要知道某个bean 的class及这个class的依赖关系,然后通过递归进行实例化并注入。
大家都知道spring的bean有两种形式,singleton及prototype
其实了解这些思想之后我们很容易想到其实就是通过对xml的解释来实生成bean的过程,如果是singleton那么我们直接缓存bean.如果是protoype我们缓存class.
所以归结起来最核心的功能就是对xml的解析及递归调用的算法,感兴趣的同学可以参考我框架中的ioc 包,里边有具体实现。
- 思考之spring的ioc
- spring的ioc之Resource
- Spring的核心之IOC
- Spring之IOC的实现
- 关于Spring AOP与IOC的个人思考
- Spring IoC的实现与思考(一)
- IOC、Spring的IOC
- 做一个合格的程序猿之浅析Spring IoC源码(一)分析前的准备和思考
- 做一个合格的程序猿之浅析Spring IoC源码(一)分析前的准备和思考
- Spring IoC(控制反转)之IoC的使用
- Spring IOC学习心得之Bean对IOC容器的感知
- Spring IOC学习心得之IOC容器的初始化过程
- Spring的IoC学习笔记之BeanFactoryPostProcessor
- Spring之IOC的注入方式总结
- Spring之IOC的注入方式总结
- Spring之IOC与DI的不同
- Spring的核心之IoC和AOP
- J2EE之Spring的IOC说明
- java反射的性能问题
- Maven配置文件Pom.xml详解
- 用TIMESTAMP类型取代INT和DATETIME
- Java框架的思考
- 浅谈JavaBean,Entity Bean,Enterprise Bean等Bean以及POJO的含义
- 思考之spring的ioc
- JDK7新特性之fork/join框架
- 队列、堆栈与数组、链表的关系与区分
- Java 7 Fork/Join 并行计算框架概览
- JVM问题定位工具
- YQL
- 你真的精通Java吗?
- Java中的volatile
- LRU与MRU算法