美文网首页思维导图IT技术篇
思维导图学习 | 第十一篇:java学习中级篇(框架),让Spr

思维导图学习 | 第十一篇:java学习中级篇(框架),让Spr

作者: 程序员手札 | 来源:发表于2019-04-26 10:05 被阅读0次

写在前面

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

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

Spring知识细节

控制反转

Spring ioc简介

spring ioc容器

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

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

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

ioc容器
spring ioc初始化
spring ioc容器工作原理

核心组件协同工作

三大核心组件

BeanFactory与ApplacationContext的区别

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

BeanFactory 与ApplacationContext

3种注入方式

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

  • Setter方法注入

  • 构造器注入

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

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

<pre class="hljs objectivec" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; padding: 15px; margin-top: 0px; margin-bottom: 20px; line-height: 1.42857; word-wrap: normal; color: rgb(101, 123, 131); background-color: rgb(246, 246, 246); border: 1px solid rgb(204, 204, 204); border-radius: 0px; text-size-adjust: none; word-break: break-word !important;"> 下面有关spring的依赖注入,说法错误的是?

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

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

原理解析

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

context的初始化过程

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

ClassPathXmlApplicationContext构造方法
refresh()方法

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

容器初始化时序图

配套Ximnd学习导图下载地址


java思维导图:https://gitee.com/1341541819.com/java_xmind/tree/master

写在最后

欢迎关注喜欢、和点赞后续将推出更多的思维导图教程,敬请期待。
欢迎关注我的微信公众号免费获取更多更全的学习资源,视频资料,技术干货!

欢迎扫码关注
资源领取方式

公众号回复“学习”,拉你进程序员技术讨论群干货资源第一时间分享。

公众号回复“视频”,领取800GJava视频学习资源。

java学习全套
820G资源

公众号回复“全栈”,领取1T前端Java产品经理微信小程序Python等资源合集大放送。

全栈资料
java
python
机器学习
产品经理
接近1T资源

公众号回复“慕课”,领取1T慕课实战学习资源。

慕课实战大全
php
python
测试
后端
前端
前端
微信
1061G资源

公众号回复“实战”,领取750G项目实战学习资源。

前后端实战项目
750实战资源

公众号回复“面试”,领取8G面试实战学习资源。

JAVA面试实战视频

传智面试讲解
8G面试资源

相关文章

网友评论

    本文标题:思维导图学习 | 第十一篇:java学习中级篇(框架),让Spr

    本文链接:https://www.haomeiwen.com/subject/qqoxnqtx.html