【Spring】AOP的核心原理配方


引言

>Aop是Spring的另一核心功能,通过动态代理实现功能扩展

文章目录

引言

一、IOC

[1.1 组件扫描](#1.1 组件扫描)

[1.2 @Import](#1.2 @Import)

二、AOP

[2.1 基本使用](#2.1 基本使用)

[2.2 接口使用](#2.2 接口使用)

[2.3 源码追踪](#2.3 源码追踪)

三、Transation

[3.1 基本配置](#3.1 基本配置)

[3.2 源码追踪](#3.2 源码追踪)


一、IOC

1.1 组件扫描

在开发中,会在配置类中添加@ComponentScan注解去获取指定包下面的bean,下面是使用:

开始源码追踪:

找出所有的BeanDefinitionRegistryPostcessor并优先执行

ClassPathBeanDefinitionScanner的doScan方法之前看多了,作用就是扫描basePackages包下面带有特定@Component注解的类。你会发现它在注入BeanDefinition时指定的beanName如果注解包含name使用改name,否则默认类名的首字母小写,如果前两个字母都大写那么beanName就是类名。

接下来我们回到ConfigurationClassParser类的deProcessConfigurarionClass方法

看完retrieve方法后再回到ConfigurationClassPostProcessor中

通过源码,可以发现@Bean注入的beanName默认就是方法名

1.2 @Import

@Import可以导入下面三种类:

1.普通的配置类;

2.实现ImportSelector接口的类

3.实现ImportBeanDefinitionRegistrar接口的类

二、AOP

2.1 基本使用

或许你会发现,最总通知方法的执行时机在原始方法执行后执行,先于环绕后置方法。

2.2 接口使用

可以通过实现Advice接口实现通知

2.3 源码追踪

先通过xml的自定义命名空间去定位到处理器

可以看到向定义池添加了一个AspectJAwareAdvisorAutoProxyCreator类

可以看见该定义类实现了Bean后处理器

可以看到aop底层通过jdk和cglib这两种方式去创建代理对象

当我们在执行方法debug时,通过f7进入执行方法,会发现进入的时代理对象里面。

三、Transation

3.1 基本配置

3.2 源码追踪

事务的源码需要从refresh刷新容器方法进入

finish的调用链需要一步步进入到真正执行Bean诞生的方法中

这里主要看after方法

定位到AnnotationAwareAspectJAutoProxyCreator类

相关推荐
CV艺术家几秒前
openssL生成免费的证书
java·linux·服务器
全速向光9 分钟前
手机玩我的世界Java版:FCL启动器下载使用指南
java·智能手机·游戏程序
pjj1985411 分钟前
Hadoop-python中使用大数据1
java·ide·eclipse
好好沉淀16 分钟前
巧用 Set 去重与复合键:高效统计分组内不重复元素的数量
java·spring boot·后端
步行cgn23 分钟前
Spring Environment 详解:Spring Boot 配置管理的核心接口
spring boot·python·spring
Wang's Blog23 分钟前
Java框架快速入门: Spring Security+OAuth2之工程结构与开发环境配置
java·spring·状态模式
lzfshub28 分钟前
Open-DIS Python发送DIS实体状态PDU:实现坦克炮塔与主炮部件参数
java·网络·python·dis
魏 无羡31 分钟前
springboot 拦截器
java·spring boot·后端
步行cgn41 分钟前
Spring Boot 绑定嵌套 Bean 详解
java·spring boot·后端
phltxy10 小时前
C语言操作符详解
java·c语言·算法