美文网首页思维导图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