学习目标
在学习的过程中,如果大家能够把目标定在「能讲述给别人,也让那个别人学会」,那么我相信你在学习的过程中就会经常总结,多总结是有好处的。尤其是你要明白你学习的这些内容都是面试的时候要考核的内容,那么请问你在面试的时候告诉面试官你学习过Spring,那么你能怎么证明这一点的呢?
最好的证明办法就是:通过你的讲解和叙述,让面试官在即使不会Spring的情况下,对Spring也有一定的了解,甚至是分享你自己的学习方法给他之后他也能够学会这项知识。如果在面试过程中你能就Spring说上20分钟,而不用面试官不停的提问,那么我觉得你一定可以就Spring这一项上面征服面试官。
所以我们本期学习目标IOC的目标就是:要能够自己叙述出来,让别人知道IOC是怎么一回事。
IOC解决的问题
java的web项目一般会分为Controller层(web层)、Service层(服务层,调用dao层)、Dao层(持久层:数据存储层),这三层之间如果不使用IOC,那么只能在上层使用new的方法进行类的实例化,这样代码之间就会有耦合存在(虽然我还不是很理解为什么这样就叫耦合了),为了解决耦合,我们需要:
(1)在配置文件中配置service和dao,配置的内容是唯一的标识(全限定类名)
(2)通过读取配置文件中的内容,利用反射来创建对象,这样就不用使用new来进行实例化,解决了编译时的耦合问题,在运行时进行加载。
我们可以通过写一个BeanFactory类来帮我们从配置文件读取类名称,然后进行实例化,并且将这些实例化的类放在一个map中管理,使用的时候只需要从map中获取就可以了。这也就是Spring中的IOC帮助我们所做的事情,IOC只能帮助我们降低代码依赖,并不能完全消除。
IOC解决的主要问题是应用不再直接对资源进行访问,而是委托beanFactory对资源进行统一管理,应用通过beanFactory使用资源。
之所以叫控制反转,一部分也是因为应用将对资源的控制权交给了bean工厂。接着我们再搜索ioc的百度百科我们就不难理解了。
而Spring就是帮助我们实现了这样的一个BeanFactory,因此我们一定要明白Spring不能帮助我们解决写数据库的问题,不能解决实现http接口的问题,Spring IoC只能帮助我们解决程序之间的依赖问题。
其他知识点
在之前我不是很理解bean这个概念,今天算是了解了:
bean:在计算机行业中的概念就是「可重用的组件」
javabean:用java开发的可重用的组件。
Spring中所说的IOC容器,就是Spring的beanFactory中帮我们创建的bean集合,我们需要使用的bean都是从这个容器中读取,这样就能够实现资源的统一管理。
推荐学习资料
学习Spring我们要常备一下参考资料和文档:
https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html
打开这个链接我们看到了如下的页面:与Spring相关的全部集中在Spring Core中,其他部分是与Spring能够配合在一起的实现其他目的的框架。