Spring AOP 后置处理器使用方式

网友投稿 352 2022-08-01


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

1 前言

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

2 BeanPostProcesser 后置处理器

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

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

主要分为两个注意事:

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

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

# 传入的参数是 bean 本身和 beanName 名称

# bean 初始化方法调用前被调用

postProcessBeforeInitialization(Object bean, String beanName)

# bean 初始化方法调用后被执行

postProcessAfterInitialization(Object bean, String beanName)

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

InstantiationAwareBeanPostProcessor 接口中定义的方法

# 实例化之前的处理

postProcessBeforeInstantiation

# 实例化之后处理

postProcessAfterInstantiation

# 对属性值进行修改,如果 postProcessAfterInstantiation方法返回false,该方法可能不会被调用。可以在该方法内对属性值进行修改

postProcessProperties

# 该方法已经废弃,其作用和 postProcessProperties 类似

postProcessPropertyValues

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

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

3 总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深入解析Java类加载的案例与实战教程(java类的加载机制及加载过程)
下一篇:Java(java培训)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~