写在前面经过一段时间的整理,希望读者看完后对自己的知识点有所帮助。

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

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



控制反转




spring ioc容器

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



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

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







核心组件协同工作




BeanFactory与ApplacationContext的区别

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



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);, 该构造方法具体代码如下。





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



喜欢的点点关注点点赞

JAVA架构师必了解的知识,你想进阿里吗?

性能优化

性能调优

JVM调优

Java程序性能优化

Tomcat

Mysql

Java笔记——看完这个,打通Spring难度系数




应用框架源码解读

Spring概述

Spring容器

Java笔记——看完这个,打通Spring难度系数




Spring AOP

Spring MVC

Java笔记——看完这个,打通Spring难度系数




Spring 5新特性

Mybatis

Java笔记——看完这个,打通Spring难度系数




分布式架构

分布式架构思维

架构开发基础

Java笔记——看完这个,打通Spring难度系数




架构核心服务层技术

Java笔记——看完这个,打通Spring难度系数




分布式环境指挥官Zookeeper

Java笔记——看完这个,打通Spring难度系数




分布式消息通讯 异步于MQ

Java笔记——看完这个,打通Spring难度系数




分布式缓存Nosql

Redis

Java笔记——看完这个,打通Spring难度系数




Memcached

缓存开发专题

Java笔记——看完这个,打通Spring难度系数




MongoDB

Java笔记——看完这个,打通Spring难度系数




数据存储

高并发分流技术Nginx

Java笔记——看完这个,打通Spring难度系数



分布式常见场景解决方案

Java笔记——看完这个,打通Spring难度系数




微服务架构

Springboot

SpringCloud

Docker虚拟化技术

Java笔记——看完这个,打通Spring难度系数




团队协作开发

Git

Maven

Jenkins

Sonar

Java笔记——看完这个,打通Spring难度系数




B2C商城项目实战

Java笔记——看完这个,打通Spring难度系数




  • 进群:可以领取免费的架构师学习资料。

  • 进群:了解最新的学习动态

  • 进群:了解最新的阿里,京东招聘资讯

  • 进群:获取更多的面试资料

1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加群。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加群。

5. 群号:468947140,点击链接加入群:https://jq.qq.com/?_wv=1027&k=5xCRqGs

6.阿里Java高级大牛直播讲解知识点,分享知识,上面五大专题都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!