最近这几天在看Spring的设计与源码,又是把自己折磨的死去活来的。但是这么经典的东西总是要好好体会吧,毕竟机会不多。
写一点自己的思考和感触吧:
问题1:IOC和DI到底有什么区别?
之前一直认为是同一个东西,就是从不同的角度来看的,所以有了不同的名称(主要是从李刚的那本书上看到所理解的),但是最近去官网看文档,发现了一句话不是这么写的,spring的文档将这二者当做了不同的概念:
2.2.1 Core Container
The Core Container consists of the spring-core
, spring-beans
, spring-context
, spring-context-support
, and spring-expression
(Spring Expression Language) modules.
The spring-core
and spring-beans
modules provide the fundamental parts of the framework, including the IoC and Dependency Injection features.
主要是因为看到了其中的一个词:and,他把IOC和DI用and连起来了,当时还不理解,问了同事,同事说是语法的问题,就是一个东西,但是由于要看源码,所以看了各种相关资料书籍和视频,在视频中又发现了一个新的讲解:IOC是把bean创建出来,DI是注入依赖,IOC是前提,为DI提供对象,DI是工具,将对象关联起来,那么这么说来我倒是能理解了。
你可以将其等同起来看待,也可以将其分开理解。
问题2:BeanFactory的实现类都是在getbean时才创建对象的,而ApplicationContext一开始就创建了对象,我也知道有懒加载的配置,我也懒得理会,我的问题是:开始这么设计beanfactory时是为了考虑性能问题(2001年时内存才几十M,硬盘也才一二十G),而后来硬件发展了(现在的内存动不动就8G,16G,32,64,硬盘那是更大以T算了),不再需要过多的考虑硬件性能了,那么我们编程时还需要过多的考虑性能问题吗?
比如说我在方法中创建的对象过多了,创建了无用的局部变量(无意识创建的),方法调用的层次过多……等等这些还需要仔细考虑吗?我想吧,应该不太用在意了,除非是在及其苛刻的条件下才需要考虑,而一般我们接触的都是很普通的程序。但是由于个人习惯问题,我还是会考虑的,个人追求完美而已(洁癖问题)。那么那些数据库的字段类型还有必要区分int short long 之类的了吗,因为到了程序中都是对应的一种类型,而硬盘又不需要节省这么点空间,统一类型就挺好的,之前还一直追求完美的,但是现在觉得数据库的设计也不必那么苛刻了。其实很多公司也都已经这么做了,我以后也应该这么做。
看代码还是只刚开头,等边看边写吧。