孙哥Spring源码第24集

第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 —> 创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值