Spring源码分析
- 格式:pdf
- 大小:497.98 KB
- 文档页数:86


SpringIoC 公共注解详解前⾔本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本。
因为 Spring 整个体系太过于庞⼤,所以只会进⾏关键部分的源码解析。
什么是公共注解?公共注解就是常见的Java 注解,特别是JSR-250中的注解。
例如:@Resource 、@PostConstructor 、@PreDestroy 等等,本⽂也就主要分析这三个注解在 Spring 中是如何处理的。
正⽂@Resource 注解的处理对 @Resource 注解的处理类是 CommonAnnotationBeanPostProcessor ,它通过实现 InstantiationAwareBeanPostProcessor 接⼝,重写postProcessProperties() ⽅法实现对标注了 @Resource 注解的字段或⽅法的⾃动注⼊。
InstantiationAwareBeanPostProcessor 接⼝的详细信息可以查看。
关于 CommonAnnotationBeanPostProcessor 这个后置处理器是怎么加⼊到 beanFactory 中的,我们在 ⼀⽂中介绍过主要是通过AnnotationConfigUtils#registerAnnotationConfigProcessors() 实现的。
BeanDefinition 合并后的后置处理CommonAnnotationBeanPostProcessor#postProcessMergedBeanDefinition上⾯代码中的 findAutowiringMetadata() ⽅法就是利⽤反射遍历类的所有字段和⽅法,找到标注了 @Resource 注解的,并缓存进injectionMetadataCache 中。
注意:静态字段和静态⽅法会过滤掉。
findAutowiringMetadata() ⽅法基本和 AutowiredAnnotationBeanPostProcessor 中的⼀致,只是处理的注解不同⽽已,可以查查看⼀⽂中该⽅法的详解。
炸!1024我的故事,⼀个写了两年博客的⼤⼚码农!沉淀、分享、成长,让⾃⼰和他⼈都能有所收获!⼀、嗯,肝了两年300篇⽂章、4本PDF、2个⼩册、1本出版图书,为⾃⼰折腾到⽇⼦让我兴奋!两年来,11前睡觉,早上6:20起床洗漱 、7:20跑步回来 ,写作✏ 或看书⼀⼩时,到了周末基本就可以全时间投⼊到⾃⼰到这个⼩世界⾥:编写案例、整理博客、发布⽂章、技术交流、同好扯⽪。
哈哈哈,有伙伴问傅哥,你咋这么卷!可能我⾃⼰到没觉得,因为做⾃⼰喜欢的事你会发现⾃⼰特别容易投⼊,也不需要所谓的⿎励来让⾃⼰坚持。
对于每⼀项的知识学习都是为了可以不被别⼈的⼀两句话忽悠住,我就想扒开看看到底咋回事,为了这个到底,好家伙就⼀直冲到了现在。
截⽌到21年10⽉24⽇,我已经在写博客的路上⾜⾜有两年了,趁着这个1024的好⽇⼦,趁着⿊夜,嘿嘿,我把博客偷偷升级到 vuepress 版本了,对于这件事我早已预谋已久。
因为最新版的博客可以增强体验、利于阅读、开放⽂章、⽀持PR,共同维护、⼀起进步!❤ 初⼼,沉淀、分享、成长,让⾃⼰和他⼈都能有所收获!⼆、对,关于作者你好,我是⼩傅哥,图书作者,⼀线互联⽹ Java ⼯程师、架构师。
⼀个着迷于技术⼜喜欢不断折腾的技术活跃者,从13年毕业到进⼊互联⽹,开发过交易、营销类项⽬,实现过运营、活动类项⽬,设计过中间件,组织过系统重构,编写过技术专利。
不仅从事业务系统的开发⼯作,也经常做⼀些字节码插桩类的设计和实现,对架构的设计和落地有丰富的经验。
在热衷于Java语⾔的同时,也喜欢研究中继器、I/O板卡、C#和PHP!除此之外⼩傅哥并不只满⾜于CRUD搬砖,也关⼼业务、运营、产品、数据、测试、运维等各项知识体系的完善学习,就研发架构设计来讲,更全⾯的学习会更有利于做出更长远的架构设计。
同时完善个⼈知识体系也更有利于个⼈成长。
所以你会看到⼩傅哥在⼯作之外的深夜、周末、假期会折腾于写⽂章、编⼩册、出书籍,并⼗分热情于对粉丝的交流、提问、解惑。
RestControllerAdvice源码解析一、概述在Spring框架的Web开发中,我们经常会使用到RestControllerAdvice这个注解,它是用来统一处理Controller层抛出的异常的。
本文将对RestControllerAdvice的源码进行深入解析,带领大家了解它的实现原理和内部机制。
二、RestControllerAdvice的作用RestControllerAdvice是一个用来全局统一处理Controller层异常的注解,它可以让我们在一处集中处理所有Controller层抛出的异常,而不用在每个Controller中单独处理异常。
通过RestControllerAdvice,我们可以实现统一的异常处理逻辑,例如记录异常日志、返回统一的异常信息等。
三、RestControllerAdvice注解的基本用法1. 基本语法```javaRestControllerAdvicepublic class GlobalExceptionHandler {// 异常处理逻辑}```在使用RestControllerAdvice时,我们只需要在一个类上添加该注解,并在该类中定义相应的异常处理方法即可。
2. 异常处理方法```javaRestControllerAdvicepublic class GlobalExceptionHandler {ExceptionHandler(Exception.class)public ResponseEntity handleException(Exception e) {// 异常处理逻辑returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).bo dy("Internal Server Error");}}```在上面的例子中,我们定义了一个handleException方法来处理Exception类型的异常。