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

本文深入探讨Spring框架中的IoC容器概念,解析BeanFactory与ApplicationContext的区别,以及三种依赖注入方式:Setter方法注入、构造器注入和注解注入。通过实例说明Spring如何通过Bean管理对象及其依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

13465705-c638c494ff9ae1c3

控制反转

13465705-431ad68e0113ed79

spring ioc容器

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

13465705-d7282344ef69e059

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

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

13465705-0668ece1fc4b1a56
13465705-ebc88eef6defd23f
13465705-12cda9c96784583e

核心组件协同工作

13465705-d648704126088a90

BeanFactory与ApplacationContext的区别

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

13465705-60d90651da20a6a4

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

13465705-de37d38369960f26
13465705-a6499074da752056

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

13465705-eb1de3d267768a02

喜欢的点点关注点点赞

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

性能优化

性能调优

JVM调优

Java程序性能优化

Tomcat

Mysql

13465705-387c999359e2fd2b

应用框架源码解读

Spring概述

Spring容器

13465705-0c0c88a9fa976eac

Spring AOP

Spring MVC

13465705-ad32de940ff65d19

Spring 5新特性

Mybatis

13465705-a44c9b513963668f

分布式架构

分布式架构思维

架构开发基础

13465705-074ea3c9e8372a10

架构核心服务层技术

13465705-fb550b2ddbed3e12

分布式环境指挥官Zookeeper

13465705-9aebb1b09a3e6f35

分布式消息通讯 异步于MQ

13465705-c4cefce0396d9268

分布式缓存Nosql

Redis

13465705-2087a50acba03a47

Memcached

缓存开发专题

13465705-5358102071f2b68e

MongoDB

13465705-9dd92253fe231b68

数据存储

高并发分流技术Nginx

13465705-000baff6acc093a4

分布式常见场景解决方案

13465705-faca952d840d419b

微服务架构

Springboot

SpringCloud

Docker虚拟化技术

13465705-87cc5f46049bd7ab

团队协作开发

Git

Maven

Jenkins

Sonar

13465705-7524515fa79a7810

B2C商城项目实战

13465705-4814ab2bc5d77f5f

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

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

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

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

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

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

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

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

5. 群号:855355016,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值