文档章节

Spring思维导图,让Spring不再难懂(ioc篇)

java思维导图
 java思维导图
发布于 2017/05/18 09:31
字数 1042
阅读 17061
收藏 1065

写在前面

写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是从ioc容器中直接获取对象。

就好像我们无需考虑对象的销毁回收一样,因为java垃圾回收机制帮助我们实现了这个过程;而ioc则是让我们无需考虑对象的创建过程,由ioc容器帮我们实现对象的创建、注入等过程。

Spring知识细节.png

控制反转

Spring ioc简介.png

spring ioc容器

在Spring框架中的核心组件只有三个:Core、Context和Bean。它们构建起了整个Spring的骨骼架构,没有它们就不可能有AOP、Web等特性功能。

Spring 整体结构图.jpg

如果说在三个核心中再选出一个核心,那就非Bean莫属了。可以说,Spring就是面向Bean的编程,Bean在Spring中才是真正的主角。

Spring为何如此流行?你会发现Spring解决了一个非常关键的问题,它可以让你对对象之间的关系转而用配置文件来管理,或者注解,也就是它的依赖注入机制。而这个注入关系在一个叫Ioc的容器中管理。Ioc容器就是被Bean包裹的对象。Spring正是通过把对象包装在Bean中从而达到管理这些对象及做一些列额外操作的目的。

ioc容器.png

spring ioc初始化.png

spring ioc容器工作原理.jpg

核心组件协同工作

三大核心组件.png

BeanFactory与ApplacationContext的区别

IOC中最核心的接口是Beanfactory提供IOC的高级服务,而ApplicationContext是建立在BeanFactory基础之上提供抽象的面向应用的服务。

BeanFactory 与ApplacationContext.png

3种注入方式

在Spring框架中,依赖注入(DI)的设计模式是用来定义对象彼此间的依赖。使用xml配置bean的情况下,它主要有两种类型:

  • Setter方法注入
  • 构造器注入

当然,有了注解之后,使用注解的方式更加方便快捷。即自动装配功能实现属性自动注入(@autowire)。

写到这里,让我想起了最近在牛客网上看的一道选择题了:

  下面有关spring的依赖注入,说法错误的是?

  A、依赖注入通常有如下两种:设置注入和构造注入:
  B、构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入
  C、当设值注入与构造注入同时存在时,先执行构造注入,再执行设值注入
  D、设值注入是指IoC容器使用属性的setter方法来注入被依赖的实例。这种注入方式比较简单、直观

牛客网给出的答案是选C,不过网友们好像对答案有不同的意见哈。查看网友评论及答案

原理解析

Spring的代码还真是不好读,分得太细了,文字也是难以描述出来,看了别人有关的博客,贴了好多代码,画了好多ER图来描述关键接口或类之间的关系。这么一篇这么长文章下来,大家也未必会认真读代码,看ER图,干脆也不跟风了。就贴了一点在我看来特关键的代码,嘿嘿。

######context的初始化过程

当运行 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 构造方法ClassPathXmlApplicationContext(String configLocation)调用了this(new String[] {configLocation}, true, null);, 该构造方法具体代码如下。

ClassPathXmlApplicationContext构造方法.jpg

refresh()方法.jpg

######从时序图来看启动上述初始化

容器初始化时序图.jpg

写在最后

下篇文章将会写Spring mvc的内容,同样以思维导图的方式编写。可视化学习,让java不再难懂。

最后的最后,欢迎关注我的微信公众号java-mindmap,下载源文件,以及更多java思维导图与项目资料供你学习,每三到四天会更新一篇,带你走进记忆脑图的世界。

关注公众号并回复“思维导图”立即下载源xmind导图。

扫一扫关注java-mindmap公众号.jpg

上篇文章阅读

© 著作权归作者所有

java思维导图

java思维导图

粉丝 1779
博文 32
码字总数 36846
作品 0
广州
程序员
私信 提问
加载中

评论(29)

l
lqyounger
唯一的不足就是图片不能放大
Miyako
Miyako
mark
w
wannshan
关于同时设置注入和构造注入的问题,我手动测了下,设置注入会覆盖构造的值。
Jacle
Jacle
不错
_森屿海巷_
_森屿海巷_
好文
wangyue_1
wangyue_1
一个markdown被你们显示成这个样子也是够了
灰灰
灰灰
不错,多种方式给我们学习与了解。
IdleMan
IdleMan
感觉Java的框架总是那么折腾
Kay
Kay
图看的累
OSCharles
OSCharles
大赞
提高效率,eclipse上你可能不知道的技巧

一张思维导图 公众号回复“eclipse技巧”可下载源导图 1、控制台(console )日志输出另保存 经常会遇到这种情况,习惯性的清掉控制台上的输出日志,再然后发现刚才的日志居然还有用,不得不又...

java思维导图
2017/10/20
743
0
面试阿里等互联网公司java岗位时,关于Spring到底需要掌握什么?

之前分享过一些BAT面试必会的文章,一些读者看了,问过我,Spring 这篇需要掌握一些什么?相信这个问题也是很多读者心中的疑问,今天就来聊一下关于 Spring,我从面试中收获的一些经验。 一....

别打我会飞
04/17
197
0
轩少/spring-shiro-training

Spring Shiro学习系统 简介 基于springmvc、spring、mybatis-plus、shiro、easyui、Log4j2简单实用的权限系统。 界面基于EasyUI,图标采用较为开放的(MIT协议)。 :http://git.oschina.net/...

轩少
2015/12/07
0
0
Spring IOC知识点一网打尽!

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工...

Java3y
2018/05/22
308
0
阿里的Spring框架面试题到底有多难?这五大问题你又掌握了多少!

前言 还在机械地打代码?我们很多开发者在开发 Spring 的程序的时候,很多的情况下,都是被动的接受了前辈们为我们做好的 Spring 特性案例。这样以来,确实在很大的程度上减少了我们开发的成...

java知识分子
02/21
111
0

没有更多内容

加载失败,请刷新页面

加载更多

kibana汉化

kibana5 / 6 需要下载补丁包,https://github.com/anbai-inc/Kibana_Hanization 其中 v6 版本原生支持国际化,只需要添加资源文件并且配置即可 kibana7 v7版本官方内置汉化资源,在配置文件 ...

细肉云吞
21分钟前
5
0
spring boot 自定义日志 log4j2

使用默认的日志在实际开发中会存在很多问题,比如备份文件名称无法自动重命名、各个等级的日志被放在一个文件中等,所以实际开发中为了更好满足我们的需求,我们一般都会自定义采用配置的方式...

雷开你的门
25分钟前
7
0
PCB设计-Allegro软件入门系列-设计参数配置(上)

前言 经历了导入网表,和放置器件后,我们就要画板子了,但是必要的设计参数也要先准备好,磨刀不误砍柴工。 《一》显示参数 这里主要设置DRC报错标志大小和飞线显示类型 (1)DRC标志可以适当...

demyar
26分钟前
6
0
js实现微博、微信分享

html <!-- 分享 --><div class="share-box"> <b style="vertical-align: middle;">分享到:</b> <a title="分享到新浪微博" class="shareSina"><span class="share-icon"></span><......

张兴华ZHero
42分钟前
7
0
创龙TMS320DM8168浮点DSP C674x + ARM Cortex-A8的CPU、NAND FLASH、NOR FLASH

TL6678-EasyEVM是广州创龙基于SOM-TL6678核心板而研发的一款多核高性能DSP开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的四层板设计,尺寸为200mm*106.65mm,它为用户提供了SOM...

Tronlong创龙
45分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部