Spring AOP 后置处理器使用方式

目录
  • 1 前言
  • 2 BeanPostProcesser 后置处理器
  • 3 总结

1 前言

在 Spring 的体系中,在前文中已经讲述了IOC 容器以及 Bean的理解,在本文基于之前文章内容将继续 AOP 的源码分享。 AOP 是一个很繁杂的知识点,这里先从后置处理器开始。

2 BeanPostProcesser 后置处理器

BeanPostProcesser 在 Spring 是一个很重要的概念,这是容器提供的一个可扩展接口,关于后置处理器 Spring 给出的注释是这样的:

简单来说就是: 类似于一个工厂钩子,允许用户自定义修改 Bean 示例信息,检查标记接口或者采用代理的方式包装 Bean。 标记接口一般是在初始化之前处理,如果是代理则是在初始化之后进行处理。

主要分为两个注意事:

  • 一个是注册,ApplicationContext 能自动检测后置处理器 Bean,并将其应用在随后创建的 Bean 实例前后。
  • 一个是顺序,对于后置处理器的接口将会按照一定的顺序进行处理,按照优先级排序从高到低依次为 PriorityOrdered、Ordered、非排序接口。

这里可以看到虽然 BeanPostProcesser 是一个接口,但是也可以有方法体,这是 java8 的特性。 主要包含以下两个方法:

# 传入的参数是 bean 本身和 beanName 名称
# bean 初始化方法调用前被调用
postProcessBeforeInitialization(Object bean, String beanName)
# bean 初始化方法调用后被执行
postProcessAfterInitialization(Object bean, String beanName)

这里使用需要说一下实例化 Instantiation 和初始化 Initialization 的区别,实例化就是创建 Bean 的过程,这个过程一般会调用构造函数,初始化就是对 Bean 进行属性的赋值操作。这里介先介绍一下 InstantiationAwareBeanPostProcessor 也是继承自 BeanPostProcesser,不过实现了更多的功能,都是需要在实例化前后执行。

InstantiationAwareBeanPostProcessor 接口中定义的方法
# 实例化之前的处理
postProcessBeforeInstantiation
# 实例化之后处理
postProcessAfterInstantiation
# 对属性值进行修改,如果 postProcessAfterInstantiation方法返回false,该方法可能不会被调用。可以在该方法内对属性值进行修改
postProcessProperties
# 该方法已经废弃,其作用和 postProcessProperties 类似
postProcessPropertyValues

还是要搬出这张比较经典的图来说明问题,

在这里声明 Bean AppInstantiationAwareConfig 实现接口 InstantiationAwareBeanPostProcessor,可以看到在项目启动过程中在 Bean 的实例化和初始化过程前后均可已实现切面功能。

3 总结

本文讲述了 AOP 的前站,后置处理器相关的使用以及 API 的作用,对于后续 AOP 的理解是很有帮助的

到此这篇关于Spring AOP 后置处理器使用方式的文章就介绍到这了,更多相关Spring AOP 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring AOP使用之多切面运行顺序

    目录 Spring AOP多切面运行顺序 多切面运行顺序 AOP的应用场景 Spring AOP切面执行顺序和常见问题 切面注解的执行顺序 切面间的执行顺序 常见问题示例 Spring AOP多切面运行顺序 多切面运行顺序 当一个方法的执行被多个切面共同切的时候,环绕通知只影响当前切面的通知顺序,例如创建两个切面logUtil,validateUtil两个切面共同监视计算器类的加法运算,add(int a,int b):测试中,看切面工具类的名称首字母,默认情况下a-z执行顺序,所以这个时候lo

  • spring AOP实现@Around输出请求参数和返回参数

    目录 @Around输出请求参数和返回参数 先把我的打印日志代码贴出来 测试 spring AOP中Around切面处理参数 解决的办法 具体的代码 @Around输出请求参数和返回参数 spring 的AOP是通过cglib动态代理和jdk的动态代理实现的. 先把我的打印日志代码贴出来 package com.zhd.exploit.api.config; import java.util.HashMap; import java.util.Map; import java.util.UUID

  • Spring AOP 创建代理对象详情

    目录 1 前言 2 创建代理对象 3 AOPContext Aop 上下文 4 AOP 分析汇总 5 JDK 动态代理和 CGLIB 的区别与联系 6 总结 1 前言 在这篇文章中中已经讲述了 AOP 的后置处理器和增强信息的获取,在本文中将继续分享 AOP 创建代理对象和上下文相关的内容. 2 创建代理对象 Spring AOP 使用 JDKProxy 和 CGLIB 两种方式来生成代理对象,具体使用哪一种需要根据 AopProxyFactory 接口的 createProxy 方法中的 Ad

  • 深入解析spring AOP原理及源码

    目录 @EnableAspectJAutoProxy 找切面 代理对象的创建 代理方法的执行 ExposeInvocationInterceptor#invoke 环绕通知的执行 前置通知的执行 后置通知的执行 返回后通知的执行 异常通知的执行 @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解用于开启AOP功能,那么这个注解底层到底做了什么呢? 查看@EnableAspectJAutoProxy的源码,发现它使用@Import注解向Spring容

  • Spring AOP 后置处理器使用方式

    目录 1 前言 2 BeanPostProcesser 后置处理器 3 总结 1 前言 在 Spring 的体系中,在前文中已经讲述了IOC 容器以及 Bean的理解,在本文基于之前文章内容将继续 AOP 的源码分享. AOP 是一个很繁杂的知识点,这里先从后置处理器开始. 2 BeanPostProcesser 后置处理器 BeanPostProcesser 在 Spring 是一个很重要的概念,这是容器提供的一个可扩展接口,关于后置处理器 Spring 给出的注释是这样的: 简单来说就是:

  • Spring AOP 后置通知修改响应httpstatus方式

    目录 Spring AOP后置通知修改响应httpstatus 1.定义Aspect 2.使用 3.ApiResponse响应体 4.ApiUtil Spring AOP前后置通知最简单案例 1.首先导jar包 2.写applicationContext.xml 3.项目架构 4.Demo类 5.前后置通知 Spring AOP后置通知修改响应httpstatus 1.定义Aspect /** * 响应体切面 * 后置通知修改httpstatus * * @author : CatalpaFla

  • Spring BeanPostProcessor(后置处理器)的用法

    目录 BeanPostProcessor 一.自定义后置处理器演示 二.多个后置处理器 三.显示指定顺序 对BeanPostProcessor接口的理解 为了弄清楚Spring框架,我们需要分别弄清楚相关核心接口的作用,本文来介绍下BeanPostProcessor接口 BeanPostProcessor 该接口我们也叫后置处理器,作用是在Bean对象在实例化和依赖注入完毕后,在显示调用初始化方法的前后添加我们自己的逻辑.注意是Bean实例化完毕后及依赖注入完成后触发的.接口的源码如下 publ

  • Spring中的后置处理器BeanPostProcessor详解

    BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中. package com.test.spring; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.B

  • Java 图解Spring启动时的后置处理器工作流程是怎样的

    探究Spring的后置处理器 本次我们主要探究invokeBeanFactoryPostProcessors():后面的代码下次再做解析: 入口代码refresh() AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); // ...... applicationContext.refresh(); public void refresh() throws

  • 详解Spring中Bean后置处理器(BeanPostProcessor)的使用

    目录 一.BeanPostProcessor接口 二.案例 三.总结 一.BeanPostProcessor接口 Bean后置处理:对Spring 工厂创建的对象进行二次加工处理,即预初始化和后初始化. PostProcessor中文意思就是后置处理器. BeanPostProcessor 接口也被称为Bean后置处理器,通过该接口可以自定义调用初始化前后执行的操作方法. 该接口中包含了两个方法:before方法(预初始化)和after方法(后厨是化) postProcessBeforeInit

  • Spring源码解析后置处理器梳理总结

    目录 前言 1.InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation()方法 2.SmartInstantiationAwareBeanPostProcessor的determineCandidateConstructors()方法 3.MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition()方法 4.SmartInstantiationA

  • Spring AOP的五种通知方式代码实例

    这篇文章主要介绍了Spring AOP的五种通知方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 AOP的五种通知方式: 前置通知:在我们执行目标方法之前运行(@Before) 后置通知:在我们目标方法运行结束之后,不管有没有异常(@After) 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning) 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing) 环绕通知:目标方法的调用由环绕通知决定

  • Jmeter后置处理器实现过程及方法应用

    1.JSON Extractor Json extractor 后置处理器用在返回格式为 Json 的 HTTP 请求中,用来获取返回的 Json 中的某个值.并保存成变量供后面的请求进行调用或断言等. Variable names:保存的变量名,后面使用 ${Variable names} 引用 JSON Path expressions:上一步中调试通过的 json path 表达式 Match Numbers:匹配数字(0代表随机,1代表第一个,-1代表所有) Default Values

  • Spring AOP的几种实现方式总结

    AOP核心概念 1.横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2.切面(aspect) 类是对物体特征的抽象,切面就是对横切关注点的抽象 3.连接点(joinpoint) 被拦截到的点,因为spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器 4.切入点(pointcut) 对连接点进行拦截的定义 5.通知(advice) 所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置.后置.异常

随机推荐