【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类

相关推荐
大阿明9 小时前
Spring Boot(快速上手)
java·spring boot·后端
bearpping9 小时前
Java进阶,时间与日期,包装类,正则表达式
java
邵奈一9 小时前
清明纪念·时光信笺——项目运行指南
java·实战·项目
sunwenjian8869 小时前
Java进阶——IO 流
java·开发语言·python
sinat_255487819 小时前
读者、作家 Java集合学习笔记
java·笔记·学习
皮皮林55110 小时前
如何画出一张优秀的架构图?(老鸟必备)
java
百锦再10 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
森林猿10 小时前
java-modbus-读取-modbus4j
java·网络·python
tobias.b10 小时前
计算机基础知识-数据结构
java·数据结构·考研
reembarkation10 小时前
光标在a-select,鼠标已经移出,下拉框跟随页面滚动
java·数据库·sql