Spring的依赖注入和控制反转

大家好,我是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

接口

Spring的依赖注入和控制反转_第1张图片

实现


Spring的依赖注入和控制反转_第2张图片

配置文件


Spring的依赖注入和控制反转_第3张图片

测试结果


Spring的依赖注入和控制反转_第4张图片

6.扩展思考

我们现在使用的是Spring的依赖注入,

前面也说到Spring是全方位的简化JAVA开发,

那Spring还有什么是我们没有体会到但是却是出了冰山一角之外的冰山呢?

具体请参考《spring实战》


7.参考文献

《Spring实战》

http://sishuok.com/forum/blogPost/list/2427.html


8.更多讨论


Spring依赖注入和控制反转_腾讯视频

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修真院,找个师兄带你入门!



你可能感兴趣的