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

8人阅读 评论(0) 收藏 举报
分类:

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

写过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思维导图,让spring不再难懂(一)

java思维导图 2017-05-03 22:32 写在前面 很多人在微信公众号中给我留言说想看spring的思维导图,正好也打算写。与其他框架相比,spring项目拥有更多的模块...
  • u011277123
  • u011277123
  • 2017-05-04 13:39:32
  • 1533

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

什么是aop  AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP...
  • zhuxianxin0118
  • zhuxianxin0118
  • 2017-08-13 10:15:13
  • 495

开源项目spring-shiro-training思维导图,让项目不再难懂

写在前面 终于完成了一个开源项目的思维导图解读。选spring-shiro-training这个项目解读是因为它开源,然后涉及到了很多我们常用的技术,如缓存,权限,任务调度,ssm框架,Druid监...
  • qq_36090419
  • qq_36090419
  • 2017-04-23 00:43:37
  • 1032

一张思维导图,让正则表达式不再难懂

一张精彩的导图  导图内容解析 语法结构字符 普通字符:字母、数字、汉字、下划线,匹配与之相同的一个字符简单转义字符:\n(换行),\t(制表...
  • qq_15175765
  • qq_15175765
  • 2017-10-16 08:49:47
  • 215

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

写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是从ioc容器中直接获取对象。 就好像我们无需考虑对象的销毁...
  • Dome_
  • Dome_
  • 2018-02-05 18:27:46
  • 49

spring ioc思维导图源文件

  • 2017年05月26日 18:11
  • 814KB
  • 下载

mybatis思维导图,让mybatis不再难懂(二)

写在前面 上一篇文章写了mybatis的基本原理和配置文件的基本使用,这一篇写mybatis的使用,主要包括与sping集成、动态sql、还有mapper的xml文件一下复杂配置等。值得注意的是,导图...
  • java_mindmap
  • java_mindmap
  • 2017-04-21 11:45:37
  • 518

Spring思维导图,让Spring不再难懂

spring mvc简介与运行原理  Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置...
  • chendc201
  • chendc201
  • 2017-07-20 11:56:12
  • 224

Spring 思维导图,让 spring 不再难懂

与其他框架相比,spring项目拥有更多的模块,我们常用的ioc,mvc,aop等,这些是spring的主要板块。一篇文章也不可能全部都讲,所以,我打算先把spring简介说一下,后续再写ioc,mv...
  • Dome_
  • Dome_
  • 2018-02-05 18:30:41
  • 76

正则表达式资料 思维导图

#正则表达式资料 ![](https://dn-anything-about-doc.qbox.me/linux_base/RegularExpression.png) 谢谢原作者的用心绘制。 ...
  • titer1
  • titer1
  • 2016-03-22 18:24:18
  • 849
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 469
    排名: 2万+
    文章存档