创建AOP代理---Spring源码从入门到精通(二十一)

简介: 创建AOP代理---Spring源码从入门到精通(二十一)

上篇文章介绍了bean的创建,创建前会先从缓存中获取bean保证单实例:

AOP源码解析(3)---Spring源码从入门到精通(二十)


这篇文章主要介绍beanPostProcessorBeforeInstantiation方法:


一、bean创建对象之前


每个bean创建对象之前都会调用beanPostProcessorBeforeInstantiation,因为实现了InstantiationAwareBeanPostProcessor。

我们来看看前面自定义切面类LogAspects和业务了MathCalculate创建bean之前如何调用的。

判断advisedBeans是否存在bean(包含了需要增强的bean)

image.png

判断当前bean是否是基础类型,是不是实现了Advice,Pointcut,Advisor,AopInfrastructureBean接口。或者判断是否是切面(@Aspect)

image.png

是否需要跳过  


1)、获取增强器(切面里面的通知方法,每一个封装的通知方法增强器是InstanttiationModelAwarePointcutAdvisor类型。判断增强器是否是AspcetJPointcutAdvisor类型。

2)、父类方法判断,永远返回false

image.png



二、创建对象


postProcessAfterInitialization

   return wrapIfNecessary()方法的调用。//包装如果需要增强器

image.png

1、获取当前bean所有增强器(通知方法)

1)findAdvisorsTharCanApply()方法找到候选的所有增强器。(找那些方法需要切入当前bean方法)。

2)获取能在当前bean使用的增强器。

3)给增强器排序。        

image.png

image.png

2、保存当前bean在advisedBeans中。

3、如果当前bean需要增强,创建代理对象,回到前面postProcessorAfterInitialization的方法中。

image.png

1)获取所有增强器(通知方法)。

2)保存到proxyFactory中。

image.png

3)创建代理对象:Spring自动决定

JdkDynamicAopProxy(config);jdk动态代理。

ObjenesisiCglibAopProxy(config);cglib动态代理。

image.png

4、给容器中组件返回增强的cglib代理对象。


以后容器中获取到的就是这个组件的代理对象,执行目标方法的时候,代理对象就会执行通知方法(切面通知方法的流程)。

相关文章
|
12天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1天前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
2天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
21 9
|
22天前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
29 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
7天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
18 1
|
3天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
7 0
|
28天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
27天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
19 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
27天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
21 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
Java 程序员 索引
Spring的三种创建方式和各种属性的注入(二)
Spring的三种创建方式和各种属性的注入(二)
121 0
Spring的三种创建方式和各种属性的注入(二)
下一篇
无影云桌面