写在前面java
写过java的都知道:全部的对象都必须建立;或者说:使用对象以前必须先建立。而使用ioc以后,你就能够再也不手动建立对象,而是从ioc容器中直接获取对象。spring
就好像咱们无需考虑对象的销毁回收同样,由于java垃圾回收机制帮助咱们实现了这个过程;而ioc则是让咱们无需考虑对象的建立过程,由ioc容器帮咱们实现对象的建立、注入等过程。编程
控制反转设计模式
spring ioc容器微信
在Spring框架中的核心组件只有三个:Core、Context和Bean。它们构建起了整个Spring的骨骼架构,没有它们就不可能有AOP、Web等特性功能。架构
若是说在三个核心中再选出一个核心,那就非Bean莫属了。能够说,Spring就是面向Bean的编程,Bean在Spring中才是真正的主角。mvc
Spring为什么如此流行?你会发现Spring解决了一个很是关键的问题,它可让你对对象之间的关系转而用配置文件来管理,或者注解,也就是它的依赖注入机制。而这个注入关系在一个叫Ioc的容器中管理。Ioc容器就是被Bean包裹的对象。Spring正是经过把对象包装在Bean中从而达到管理这些对象及作一些列额外操做的目的。app
核心组件协同工做框架
BeanFactory与ApplacationContext的区别学习
IOC中最核心的接口是Beanfactory提供IOC的高级服务,而ApplicationContext是创建在BeanFactory基础之上提供抽象的面向应用的服务。
3种注入方式
在Spring框架中,依赖注入(DI)的设计模式是用来定义对象彼此间的依赖。使用xml配置bean的状况下,它主要有两种类型:
固然,有了注解以后,使用注解的方式更加方便快捷。即自动装配功能实现属性自动注入(@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);
, 该构造方法具体代码以下。
######从时序图来看启动上述初始化
写在最后
下篇文章将会写Spring mvc的内容,一样以思惟导图的方式编写。可视化学习,让java再也不难懂。
最后的最后,欢迎关注个人微信公众号java-mindmap,下载源文件,以及更多java思惟导图与项目资料供你学习,每三到四天会更新一篇,带你走进记忆脑图的世界。
关注公众号并回复“思惟导图”当即下载源xmind导图。
上篇文章阅读