大家好,我是IT修真院郑州分院第6期的学员李亚衡,一枚正直纯洁善良的JAVA程序员
今天给大家分享一下,修真院官网JAVA任务一,深度思考中的知识点——Spring的依赖注入和控制反转
1.背景介绍
Spring是什么?
Spring是一个开源的轻量级开发应用框架
最早由Rod Johnson 创建,并在《Expert One-on-One:J2EE Design and Development》这本著作中进行了介绍。
Spring是为了解决企业级应用开发的复杂性创建的,Spring可以让简单的JavaBean实现之前只有EBJ才能完成的事情。
但Spring不仅仅局限于服务器端开发,任何JAVA应用都能在简单性,可测试性和松耦合的方面从Spring中获益。
Spring的不同之处就在于许多其他框架都声明在“某些”方面做了简化,但Spring是致力于“全方位的简化JAVA的开发,那么这势必会引出一些疑问:“Spring为什么这么牛X ?”
Spring采取了4中关键策略:
1.基于POJO的轻量级和最小侵入性编程
2.通过依赖注入和面向接口实现松耦合
3.基于切面和惯例进行声明式编程
4.通过切面和模板减少板式代码
2.知识剖析
我们来针对性的讲一下依赖反转和控制反转
什么是IOC?
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,
Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
如何理解好控制反转(IOC)呢?
谁控制谁,控制什么
传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;
谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
为何是反转,哪些方面反转了?
了解反转先认识一下正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;
而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;
哪些方面反转了?依赖对象的获取被反转了
什么是DI?
DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。
依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置
,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
如何理解好依赖注入(DI)呢?
谁依赖谁,为什么需要依赖
谁注入谁,注入了什么
谁依赖于谁:当然是应用程序依赖于IoC容器;
为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
3.常见问题
IoC和DI之间有什么关系呢?
其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。
4.解决方案
5.编码实战
用Spring写一个简单的hellword
接口
实现
配置文件
测试结果
6.扩展思考
我们现在使用的是Spring的依赖注入,
前面也说到Spring是全方位的简化JAVA开发,
那Spring还有什么是我们没有体会到但是却是出了冰山一角之外的冰山呢?
具体请参考《spring实战》
7.参考文献
《Spring实战》
http://sishuok.com/forum/blogPost/list/2427.html
8.更多讨论
ppt:https://ptteng.github.io/PPT/PPT-java/java-%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC%E5%92%8C%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5-task1.html#/
感谢大家观看!
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
详情点击http://www.jnshu.com/login/1/13755710,进入IT修真院,找个师兄带你入门!