查看原文
其他

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

2017-05-21 java 思维导图 开源中国


写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。


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


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




控制反转



spring ioc容器


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



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


Spring为何如此流行?你会发现Spring解决了一个非常关键的问题,它可以让你对对象之间的关系转而用配置文件来管理,或者注解,也就是它的依赖注入机制。


而这个注入关系在一个叫Ioc的容器中管理。Ioc容器就是被Bean包裹的对象。Spring正是通过把对象包装在Bean中从而达到管理这些对象及做一些列额外操作的目的。



核心组件协同工作



BeanFactory 与 ApplacationContext 的区别


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



3 种注入方式


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


- Setter方法注入

- 构造器注入


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

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



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

(https://www.nowcoder.com/questionTerminal/a1644e2668f94ab78bfefa38808fb006)


原理解析


Spring的代码还真是不好读,分得太细了,文字也是难以描述出来,看了别人有关的博客,贴了好多代码,画了好多ER图来描述关键接口或类之间的关系。


这么一篇这么长文章下来,大家也未必会认真读代码,看ER图,干脆也不跟风了。就贴了一点在我看来特关键的代码,嘿嘿。


context 的初始化过程


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



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



写在最后


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


如需查看大图,请点击下方的阅读原文



推荐阅读

20 个开源 Android App,帮助提高开发技巧

让开发更快更顺畅的 VS Code 插件推荐(二)

一名 40 岁“老”程序员的反思

用于构建优秀命令行的 4 个 Python 库

“放码过来”邀您亮“项”,一不小心就火了!

点击“阅读原文”查看更多精彩内容

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存