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

转载自 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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring(6) 渲染web视图

【0】README1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review “spring(6) 渲染web视图” 的相关知识;【1】 理解视图解析【1.1】视图解析的基础知识以及spring 提供的其他视图解析器1…

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

转载自 Spring思维导图,让Spring不再难懂(aop篇) 什么是aop AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程&…

tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)

【0】README1)本文部分文字描述转自:“深入剖析tomcat”,旨在学习“tomcat启动脚本分析” 的相关知识;2)for tomcat4 startup files, please visit https://github.com/pacosonTang/HowTomcatWorks/tree/ma…

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

转载自 Spring思维导图,让spring不再难懂(一) 摘要: Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE …

spring(7)spring mvc 的高级技术

【0】README1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review “spring(7)spring mvc 的高级技术” 的相关知识;2)本文将会看到如何编写控制器来处理文件上传,如…

Ubuntu下MySQL、Redis以及MongoDB三个数据库的启动、重启以及停止命令

一、MySQL #启动 /etc/init.d/mysql start #停止 /etc/init.d/mysql stop #重启 /etc/init.d/mysql restart 二、Redis #启动 redis-server #停止 pkill redis-server三、MongoDB #启动服务 sudo service mongod start #重启 sudo service mongod restart #终止 sudo serv…

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

转载自 Spring思维导图,让Spring不再难懂(mvc篇)spring mvc简介与运行原理Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持…

spring(10)通过spring 和 JDBC征服数据库

【0】README1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review “spring(10)通过spring 和 JDBC征服数据库” 的相关知识;【1】 spring 的数据访问哲学1)intro:s…

Ubuntu下apt-get方式Git的安装、配置和更新

一、首先命令行下载Git sudo apt-get update sudo apt-get install git 通过此种方式安装的git可能不是官方的最新版本,通过 git --version 查看版本信息,然后与git官网比对官网下载地址 二、然后配置git的帐号信息 git config --global user.name &q…

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

转载自 Spring思维导图,让Spring不再难懂(cache篇) 关于缓存 缓存是实际工作中非常常用的一种提高性能的方法。而在java中,所谓缓存,就是将程序或系统经常要调用的对象存在内存中,再次调用时可以快速从内存…

intro to JNDI

【0】README 1)本文转自 http://sishuok.com/forum/blogPost/list/1186.html 【1】原文如下 1)JNDI 是什么? JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之…

Mybatis3配置方法

一.准备 1.三个Jar包, 1.mybatis-3.2.1.jar 2.mysql-connector-java-5.1.12-bin.jar 3.log4j-1.2.17.jar 2.vo类对象 public class SysUser {private Long id;private String name;private String loginName;private String password;private String avatar;/** ge…

小白学数据:教你用Python实现简单监督学习算法

转载自 小白学数据:教你用Python实现简单监督学习算法今天,文摘菌想谈谈监督学习。监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近日,监督学习也依旧是入门机器学习的钥…

Spring_01_IoC初级总结

1.IoC简介 (转载) (原文:http://jinnianshilongnian.iteye.com/blog/1413846) via:jinnianshilongnian 1.1、IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Io…

深度学习工具caffe详细安装指南

转载自 深度学习工具caffe详细安装指南前言: 在一台系统环境较好的linux机器上可以很容易的安装caffe,但是如果系统本身很旧,又没有GPU的话,安装就太麻烦了,所有都得从头做起,本文档旨在尽可能覆盖安装所要…

Spring_02_AOP初级总结

1.AOP简介 是对OOP编程方式的一种补充。翻译过来为“面向切面编程”。 可以理解为一个拦截器框架,但是这个拦截器会非常武断,如果它拦截一个类,那么它就会拦截这个类中的所有方法。如对一个目标列的代理,增强了目标类的所有方法…

spring(11)使用对象-关系映射持久化数据

【0】README1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review “spring(11)使用对象-关系映射持久化数据” 的相关知识;【2】spring 与 java 持久化API1)intro:…

漫画:什么是数据仓库

转载自 玻璃猫 算法与数据结构一个故事 在很久很久以前,世界上生活着许多种族,有人类,有矮人,有精灵......他们有着不同的信仰,不同的文化,彼此相安无事。可是,有一个猥琐男却偏偏想要统治整个世…

SpringMVC_初级总结

1.SpringMVC的工作原理 浏览器发出一个http请求给服务器,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),服务器将请求转交给DispatcherServlet.DipatcherServlet接收到这个请求之后,根据请求的路径&#…

tomcat中配置jndi数据源以便spring获取

【0】README0)intro to jndi, plase visit intro to jndi;1)本文译自 Configuring Spring MVC JdbcTemplate with JNDI Data Source in Tomcat;2)本文旨在分析如何通过springmvc 获取 JNDI 数据源 以连接到…