Spring核心——官配后置处理器 原

实际上Ioc容器中的大量功能都是通过后置处理器实现的,这里介绍几个主要的处理器。

RequiredAnnotationBeanPostProcessor

RequiredAnnotationBeanPostProcessor它用于处理@Required注解。当我们一个Setter方法加入@Required后,表示必须设置参数,如果未设置则抛出BeanInitializationException异常。

使用方法1,直接添加一个Bean:

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />
<!-- 其他bean -->

这相当于直接添加一个后置处理器,他会检查所有的被@Required标注的Setter方法。

使用方法2,设置context:

<!-- 如果使用了以下2个context级别的标签,则会启用RequiredAnnotationBeanPostProcessor的功能 -->
<context:annotation-config />
<context:component-scan />

使用技巧1,修改扫描的注解。处理器默认会识别@Required注解,但是可以通过RequiredAnnotationBeanPostProcessor::setRequiredAnnotationType修改生效的注解,例如:

<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor">
   <property name="requiredAnnotationType" value="x.y.Require" />
</bean>
package x.y;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Require {}

使用技巧2,告知RequiredAnnotationBeanPostProcessor不处理某些Bean方法:

<bean class="x.y.A">
    <meta  key="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor.skipRequiredCheck" value="true" /> 
</bean>

AutowiredAnnotationBeanPostProcessor

这个后置处理器在3.x之后使用Spring框架的系统几乎都会使用,就是他在处理大名鼎鼎的@Autowired和@Value注解。此外他也支持JSR-330中的@Inject注解。当我们使用<context:annotation-config /> 或<context:component-scan />时,IoC容器也会启用这个功能。

可以通过setAutowiredAnnotationType、setAutowiredAnnotationTypes方法设定对应的注解,可以通过setRequiredParameterName来设置@Autowired中的属性方法:

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
   <property name="autowiredAnnotationType" value="x.y.MyInjectAnnotation" />
</bean>

CommonAnnotationBeanPostProcessor

这个处理器继承InitDestroyAnnotationBeanPostProcessor实现JSR-250的@PostConstruct和@PreDestroy的处理,此外还支持@Resource注解。JSR-250和Resouce貌似没有什么太直接的关系,所以被命名为Common表示这是一个大杂烩一般的存在。同样使用annotation-config和component-scan会被自动启用(因为都是用于处理注解的)。

同样也有initAnnotationType、destroyAnnotationType等Setter方法来设置自定义注解。

InitDestroyAnnotationBeanPostProcessor

处理Bean的生命周期方法以及资源数据注入,CommonAnnotationBeanPostProcessor继承自它。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后台及大数据开发

springBoot系列教程01:elasticsearch的集成及使用

 1.首先安装elasticsearch 集群环境,参考 http://www.cnblogs.com/xiaochangwei/p/8033773.html

12610
来自专栏后台及大数据开发

【高并发】秒杀系统高并发请求排队处理

今天无意中看见了这位兄弟的文章 通过请求队列的方式来缓解高并发抢购(初探)  但文章最后说并发超过500 就会出现超发,看了下代码,的确有这个问题

27410
来自专栏后台及大数据开发

springBoot系列教程08:拦截器(Interceptor)的使用

仔细阅读 过滤器(filter)和拦截器(interceptor)的区别 后明白了不少

17110
来自专栏后台及大数据开发

kubernetes集群搭建(6):kubernetes基本使用演示

流程: 用户访问client应用,client应用中调用server应用,由于部署了多节点,client在访问server时应该配置server 暴露的虚拟IP...

17320
来自专栏后台及大数据开发

springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用

首先说下查询缓存:查询缓存就是相同的数据库查询请求在设定的时间间隔内仅查询一次数据库并保存到redis中,后续的请求只要在时间间隔内都直接从redis中获取,不...

14410
来自专栏Web项目聚集地

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)

本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解...

34310
来自专栏后台及大数据开发

springBoot系列教程07:异常捕获

发生异常是很正常的事,异常种类也是千奇百怪,发生异常并不可怕,只要正确的处理,并正确的返回错误信息并无大碍,如果不进行捕获或者处理,分分钟服务器宕机是很正常的事

18130
来自专栏Web项目聚集地

Spring MVC+Spring+Mybatis搭建图书管理系统

本项目为图书管理系统,后端使用ssm框架、前端使用主流的layui,利用Maven工具管理Jar包搭建项目,此项目作者为「陈豪」,作者本人独立开发,仅用于学习使...

41420
来自专栏后台及大数据开发

springBoot系列教程03:redis的集成及使用

1.为了高可用,先安装redis集群 参考我的另一篇文章 http://www.cnblogs.com/xiaochangwei/p/7993065.html

16030
来自专栏Web项目聚集地

从零学习Spring MVC框架「环境搭建和MVC架构」

这是Spring MVC框架教程的第一篇,首先为大家讲解MVC架构思想,MVC模式并不是Javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把...

14320

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励