Spring AOP 后置处理器使用方式

 更新时间:2022年05月05日 14:46:33   作者:​ 斜月   ​  
这篇文章主要介绍了Spring AOP 后置处理器使用方式,文章围绕主题相关内容展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

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 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Java中GuavaCache返回Null的注意事项

    浅谈Java中GuavaCache返回Null的注意事项

    Guava在实际的Java后端项目中应用的场景还是比较多的,比如限流,缓存,容器操作之类的,本文主要介绍了GuavaCache返回Null的注意事项,感兴趣的可以了解一下
    2021-10-10
  • 解决@Async(“taskExecutor“)异步线程报错问题

    解决@Async(“taskExecutor“)异步线程报错问题

    这篇文章主要介绍了解决@Async(“taskExecutor“)异步线程报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java通过What、Why、How了解弱引用

    Java通过What、Why、How了解弱引用

    这篇文章主要介绍了Java通过What、Why、How了解弱引用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 实例解析观察者模式及其在Java设计模式开发中的运用

    实例解析观察者模式及其在Java设计模式开发中的运用

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己.下面就以实例解析观察者模式及其在Java设计模式开发中的运用
    2016-05-05
  • TOMCAT内存溢出及大小调整的实现方法

    TOMCAT内存溢出及大小调整的实现方法

    下面小编就为大家带来一篇TOMCAT内存溢出及大小调整的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • java和jsp中的request使用示例

    java和jsp中的request使用示例

    这篇文章主要介绍了java和jsp中的request使用示例,需要的朋友可以参考下
    2014-02-02
  • SpringBoot返回json和xml的示例代码

    SpringBoot返回json和xml的示例代码

    本篇文章主要介绍了SpringBoot返回json和xml的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • SpringBoot接收前端参数的几种常用方式

    SpringBoot接收前端参数的几种常用方式

    在Spring Boot开发中接收参数是非常常见且重要的一部分,依赖于请求的不同场景,Spring Boot提供了多种方式来处理和接收参数,这篇文章主要给大家介绍了关于SpringBoot接收前端参数的几种常用方式,需要的朋友可以参考下
    2024-07-07
  • mybatis动态拼接实现有条件的插入

    mybatis动态拼接实现有条件的插入

    这篇文章主要介绍了mybatis动态拼接实现有条件的插入,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java使用Redis及其优化详解

    Java使用Redis及其优化详解

    大家好,本篇文章主要分享的是Java使用Redis及其优化详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论