创建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代理对象。


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

相关文章
|
19天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
16天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
38 2
|
16天前
|
Java 数据库连接 数据库
从入门到精通---深入剖析Spring DAO
在Java企业级开发中,Spring框架以其强大的功能和灵活性,成为众多开发者的首选。Spring DAO(Data Access Object)作为Spring框架中处理数据访问的重要模块,对JDBC进行了抽象封装,极大地简化了数据访问异常的处理,并能统一管理JDBC事务。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring DAO,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
21 1
|
20天前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
46 5
|
20天前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
38 5
|
25天前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
52 8
|
24天前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
24天前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
36 5
|
24天前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
35 4
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
223 2
下一篇
DataWorks