孙哥Spring源码第24集

2023-09-19 09:46:20

第24集 处理AOP

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】

1、谈一下你对ApplicationContext的理解

BeanFactoryPostProcessors
BeanPostProcessor

1. BDBeanFactoryPostProcessors、BeanPostProcessor作用。
处理BDBeanFactoryPostProcessors
处理对象BeanPostProcessor
2. BeanFactory核心的作用
	2.1  对象的查找
		父容器
		singletonObjects
        earlySinglteontObjects
        factoryObjects 
    2.2 对象创建
    	  对象的创建
          属性的填充
          对象的初始化

2、代理模式和装饰器模式的区别

1. 代理设计模式:通过代理类 为原始类(目标) 增加额外功能。
		好处:利于原始类(目标类)维护 

2. 代理设计模式 与 装饰器设计模式 区别
       注意:从UML图角度 代理设计模式 与 装饰器设计模式 完全一致
       区别:
             代理设计模式 额外性能功能的增强 动态代理概念(可以通过动态字节码技术 创建   JDK / CGLIB  Javasist  ASM )
			 装饰器设计模式 增强的功能  本职功能的增强 
3. 装饰器模式:
		javaIO流
4. 代理模式:
		Spring事务处理

3、Spring AOP的开发的概念

1、原始对象:(目标对象) 【只做核心功能,Service】
2、额外功能:根据运行时机 原始方法 之前 之后 前后 抛出异常的时候
3、切入点 :额外功能增加给那些原始方法,是由切入点决定。
4、切面 =切入点+额外功能
Spring体系 Advisor
AspectJ 注解形式开发AOP Aspect —> @Aspect

4、为什么在SpringBoot中不需要@EnableAspectJAutoProxy

@SpringBootApplication里面有@EnableAutoConfiguration帮忙注入了@EnableAspectJAutoProxy

5、编写一个简单AOP测试案例

6、动态代理JDK和Cglib的区别

  • JDK 根据接口 通过动态字节码技术 进行接口的实现 ,既保留原始功能 ,又增加额外功能
  • CGLIB 根据原始类 通过动态字节码技术 创建原始类的子类,在子类的对应方法中,既保留原始功能,有增加额外功能

7、spring如何区分JDK和Cglib?

如果没有接口,默认用Cglib

8、如果用接口默认用JDK,能不能改成Cglib?

@EnableAspectJAutoProxy(proxyTargetClass = true)

9、如果没有接口默认用Cglib,能不能改成JDK?

手工添加 @EnableApsectJAutoProxy设置
默认覆盖SpringBoot内置 设置

9、Spring中如何把JDK和CGLIB与Spring框架进行整合?

通过BeanPostProcessor Spring负责原始对象的创建 后续通过AnnotationAwareAspectJAutoProxyCreator
对原始对象进行代理的创建

10、SpringBoot中 改代理创建的方式?

手工添加@EnableAspectJAutoProxy(proxyTargetClass=true),

11、Spring和SpringBoot默认代理

Spring默认代理是JDK
SpringBoot默认是Cglib

12、JDK代理测试和CGLIB代理测试

JDK

image-20230516001754570

Cglib

image-20230516001810127

13、仿写@EnableAspectAutoProxy

image-20230516001602677

14、为什么@EnableAspectAutoProxy用@Import进行包装

语义化

15、@SpringBootApplication包含了那些注解?

  • @Configuration
  • @EnableAutoConfiguration
  • @CompontScan

16、SpringAOP的本质是什么?

BeanPostProcessor AnnotationAwareAspectJAutoProxyCreator
image-20230516001011232

17、创建代理的这个BeanPostProcessor在Spring源码中什么位置执行的?

正常情况是:创建对象 属性填充 初始化的beanPostProcessorAfter【执行】
循环引用的情况是:如果存在循环引用的话,将会在singletonFactories存储的lamba表达式中创建

18、加上@EnableAspectAutoProxy会多几个BeanPostPrcoessor?

image-20230515234539898

19、代理对象一定会在初始化创建吗?

不一定 循环引用创建 -----> singletonFactrices ----> lamba —> 创建

更多推荐

计算机毕设 python图像检索系统设计与实现

文章目录0前言1课题简介2图像检索介绍(1)无监督图像检索(2)有监督图像检索3图像检索步骤4应用实例5最后0前言🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过

Rockchip RK3399 - USB触摸屏接口驱动

----------------------------------------------------------------------------------------------------------------------------开发板:NanoPC-T4开发板eMMC:16GBLPDDR3:4GB显

spring:实现初始化动态bean|获取对象型数组配置文件

0.引言近期因为要完成实现中间件的工具包组件,其中涉及要读取对象型的数组配置文件,并且还要将其加载为bean,因为使用了spring4.3.25.RELEASE版本,很多springboot的相关特性无法支持,因此特此记录,以方便后续同学有相同情况可以参考1.获取对象型数组配置文件首先对象型数组配置文件如下所示:min

什么是实时操作系统(UCOS简介)

uC/OS-III官网:HomePage-WestonEmbeddedSolutions一、裸机与RTOS介绍下面我将从不同方面阐述裸机与试试操作系统的区别,从而进一步介绍裸机和实时操作系统定义:裸机:裸机指的是没有任何操作系统或软件层的硬件系统。在裸机状态下,程序可以直接访问硬件资源。实时操作系统:实时操作系统(RT

[Python进阶] 程序打包之Pyinstaller参数介绍

5.4Pyinstaller参数介绍5.4.1选项参数参数名说明-h、–help查看Pyinstaller所有命令的用法和帮助-v、–version查看当前Pyinstaller版本–distpathDIR设置dist位置,默认当前目录–workpathWORKPATH设置build位置,默认当前目录-y、–nocon

Java基础之lambda表达式(JDK1.8新特性)

文章目录Lambda表达式各种函数式接口Lambda的语法Lambda表达实例举例说明变量作用域处理lambda表达式变量作用域函数式接口使用实例1使用实例2使用示例3(集合排序)使用示例4(按照对象属性给list排序)使用示例4总结参考Lambda表达式Lambda表达式允许把函数作为一个方法的参数(函数作为参数传递

第十四届蓝桥杯省赛 Python B 组 D 题——管道(AC)

目录1.管道1.问题描述2.输入格式3.输出格式4.样例输入5.样例输出6.评测用例规模与约定2.解题思路3.AC_Code1.管道1.问题描述有一根长度为len\text{len}len的横向的管道,该管道按照单位长度分为len\text{len}len段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。一开始

OpenHarmony应用开发—ArkUI组件集合

介绍本示例为ArkUI中组件、通用、动画、全局方法的集合。效果预览使用说明:1.点击组件、通用、动画、全局方法四个按钮或左右滑动切换不同视图。2.点击二级导航(如通用属性、通用事件等),若存在三级导航则展开三级导航(如Border边框、点击事件等);若不存在三级导航,则跳转至详情页面。若存在三级导航(如Border边框

从腾讯跳槽到英特尔,真实感受爆料

腾讯已经不像互联网公司了,之前国内的互联网还是要感谢一下外企,但是后面就开始卷起来了!在卷的环境里,食堂再好吃也没有用,因为是不会补回来的,而且英特尔已经是外企的天花板了知足吧!如果办公区很有生活的气息,那只能说明这些人根本没有生活,只为事业奋斗!还有很多网友询问英特尔的工作情况和面试情况“面试和工作都是英文吗?”“英

python爬虫:新兴动态渲染工具Playwright的简单介绍和教程

Playwright是一个用于自动化浏览器操作的工具,它支持Chromium、Firefox和WebKit浏览器,并提供了Python、JavaScript和其他编程语言的API。以下是Playwright的介绍和入门教程:1.安装Playwright首先,你需要安装Playwright。在Python中,你可以使用p

PCB布线之电源线干扰?|深圳比创达EMC

一客户画户外摄像头的板子,板子上电源线非常多,6层板,电源层已经被分割完了,还有2根电源线,没办法只能并行走线了,板子画完后发主管评审,主管让其在2根电源线中间走一根地线,该客户感觉没必要,因为地线太长了,太细了会形成天线,而且中间也没有地方可以打地孔。如下图:其实直流电源之间的影响有几个基本的优先原则:电源交流分量高

热文推荐