尚硅谷Java第三季--2.Spring

Spring常用的设计模式

(1)工厂模式:Spring使用工厂模式,通过BeanFactory和ApplicationContext来创建对象

(2)单例模式:Bean默认为单例模式

(3)策略模式:例如Resource的实现类,针对不同的资源文件,实现了不同方式的资源获取策略

(4)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术

(5)模板方法:可以将相同部分的代码放在父类中,而将不同的代码放入不同的子类中,用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate

(6)适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式,Spring MVC中也是用到了适配器模式适配Controller

(7)观察者模式:Spring事件驱动模型就是观察者模式的一个经典应用。

(8)桥接模式:可以根据客户的需求能够动态切换不同的数据源。比如我们的项目需要连接多个数据库,客户在每次访问中根据需要会去访问不同的数据库

AOP

注解

在这里插入图片描述
在这里插入图片描述

面试题

在这里插入图片描述

在这里插入图片描述

SpringBoot1.x.x 对应的是Spring4

在这里插入图片描述

Spring4 AOP的执行顺序
程序运行正常:
在这里插入图片描述

程序运行抛出异常:
在这里插入图片描述

SpringBoot2.x.x 对应的是Spring5

Spring5 AOP的执行顺序 直接记5的顺序

在这里插入图片描述
程序运行抛出异常:
在这里插入图片描述
总结:
在这里插入图片描述

在这里插入图片描述

Spring bean的循环依赖

在这里插入图片描述
在这里插入图片描述
Spring解决循环依赖的主要步骤:
在这里插入图片描述

Spring Bean的两种注入方式:
1.构造器注入 (容易导致循环依赖问题)
2. set方法注入 (避免循环依赖问题)

在这里插入图片描述

构造器注入 :A依赖B, B依赖A, A没有初始化(new出来),比也没有初始化(new 出来),导致相互依赖,相互初始条件不成立。

在这里插入图片描述

构造器注入

在这里插入图片描述

在这里插入图片描述

构造器注入没有办法解决循环依赖
在这里插入图片描述

Set方法注入

在这里插入图片描述

在这里插入图片描述

纯的java 通过Set方法注入可以解决循环依赖
在这里插入图片描述

Spring Bean中的循环依赖

在这里插入图片描述
Spring默认为单例模式,如果设置为Prototype(每次注入都会new 一个新对象)
在这里插入图片描述

Spring3级缓存

default Singleton Bean Registry
在这里插入图片描述
所谓三级缓存就是Spring为解决循环依赖的3个map
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
实例化和初始化概念:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

spring循环依赖debug源码

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
容器和bean初始化完成的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

getSingleton

在这里插入图片描述
在这里插入图片描述

doCreateBean

在这里插入图片描述
b依赖a

在这里插入图片描述

spring循环依赖总结

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

源码流程总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值