Spring源码学习-后置处理器,Autowired实现原理

这篇具有很好参考价值的文章主要介绍了Spring源码学习-后置处理器,Autowired实现原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Autowired实现原理

populateBean

给创建好的bean实例进行普通属性的赋值
Spring源码学习-后置处理器,Autowired实现原理,Spring源码解读,spring,学习,java

InstantiationAwareBeanPostProcessor
AutowiredAnnotationBeanPostProcessor

这个就是用来完成Autowired注解能够自动装配的bean后置处理器
这个方法初始化了一个set,用来存放需要解析的自动装配注解,里面就包括Autowired,Value和Inject等,之后Spring拿到这些元数据信息直接反射赋值

private final Set<Class<? extends Annotation>> autowiredAnnotationTypes = new LinkedHashSet<>(4);
public AutowiredAnnotationBeanPostProcessor() {
		this.autowiredAnnotationTypes.add(Autowired.class);
		this.autowiredAnnotationTypes.add(Value.class);
		try {
			this.autowiredAnnotationTypes.add((Class<? extends Annotation>)
					ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader()));
			logger.trace("JSR-330 'javax.inject.Inject' annotation found and supported for autowiring");
		}
		catch (ClassNotFoundException ex) {
			// JSR-330 API not available - simply skip.
		}
	}

后置处理器

BeanFactory的后置处理器
BeanDefinitionRegistryPostProcessor

在容器刷新12步骤中由invokeBeanFactoryPostProcessors方法调用,是bean定义信息注册中心的增强,先去执行实现了PriorityOrdered接口,再去执行实现了Ordered接口的实例对象,最后去执行没有实现顺序接口的bean工厂增强器

BeanFactoryPostProcesso

bean工厂的增强器,执行步骤同BeanDefinitionRegistryPostProcessor一样

ConfigurationClassPostProcessor

配置类的增强处理器,Spring底层通过他继承了BeanDefinitionRegistryPostProcessor实现了bean信息注册中心的增强,把项目中所有的配置类信息解析出来放入信息注册中心,等待后续的Bean创建.使用doProcessConfigurationClass方法解析诸如@Component@ComponentScan等等注解

Bean的后置处理器

由容器刷新12步中的registerBeanPostProcessors方法去专门的注册Bean的后置增强处理器

BeanProcessor
  1. postProcessBeforeInitialization:有机会在对Bean进行填充修改
  2. postProcessAfterInitialization:有机会在对Bean进行填充修改
InstantiationAwareBeanPostProcessor
  1. postProcessAfterInstantiation:bean初始化后进行处理,@Autowired自动装配的赋值可以再次操作,但是他直接返回true,没有做事
  2. postProcessProperties:真正进行自动装配(也可以自己解析自定义的注解进行属性值的注入)
MergedBeanDefinitionPostProcessor

postProcessMergedBeanDefinition:再次修改Bean的定义信息

SmartInstantiationAwareBeanPostProcessor
  1. predictBeanType:在注册监听器registerListeners()步骤触发,是在组件创建之前最后修改组件类型的机会,可以给组件指定任意的类型
  2. determineCandidateConstructors:告诉spring可以用哪些构造器
  3. getEarlyBeanReference:返回早期的Bean引用

对Bean进行代理增强期间进行使用

Bean生命周期总结图

Spring源码学习-后置处理器,Autowired实现原理,Spring源码解读,spring,学习,java文章来源地址https://www.toymoban.com/news/detail-578690.html

到了这里,关于Spring源码学习-后置处理器,Autowired实现原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jmeter后置处理器——JSON提取器

    目录 1、简介  2、使用步骤         1)添加线程组         2)添加http请求         3) 添加JSON提取器 1、简介         JSON是一种简单的数据交换格式,允许互联网应用程序快速传输数据。JSON提取器可以从JSON格式响应数据中提取数据、简化从JSON原始数据中提取特

    2024年01月16日
    浏览(39)
  • 【JMeter】后置处理器的分类以及场景介绍

    1.常用后置处理器的分类 Json提取器 针对响应体的返回结果是 json格式 的 会自动生成新的变量名为【提取器中 变量名_MatchNr 】,取到的个数由jsonpath expression取到的个数决定 可以当作普通变量调用,调用语法:${ 提取器中 变量名_MatchNr } 正则表达式提取器 返回结果是 任何数

    2024年02月05日
    浏览(51)
  • jmeter-BeanShell预处理器与BeanShell后置处理器的使用

    BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的松散类型、命令、闭包等通用脚本来对其进行拓展。 前置处理器:请求发送之前对请求参数做一些处理 后置处理器:请求发送完成之后对响应数

    2023年04月17日
    浏览(43)
  • 【Jmeter】Request1输出作为Request2输入-后置处理器

    【Jmeter】基础介绍-详细 接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即: 需要实现Request1的返回作为Request2的RequestBody或Header Jmeter支持后置处理器,即对http请求(或其他取样器)的返回值进行提取并赋值给变量。 本例中从Request1的ResponseBody中提

    2023年04月20日
    浏览(42)
  • (Bean工厂的后处理器入门)学习Spring的第七天

    一 . Bean工厂的后处理器入门 : 直接上图 BeanDefinitionRegistyPostProcessor 为 BeanFactoryProcessor的子接口 , 前者先执行(图里只有Bean工厂的后处理器第一个类型) 如下图 : 这两个接口可改变两个Map(BeanDefinitionMap , singletonObject)里的信息 (黑马只讲了BeanFactoryPostProcessor , 第二个应该不重要)

    2024年01月23日
    浏览(51)
  • Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】

    目录 一、单个控制器异常处理 1.1 控制器方法 1.2 编写出错页面 1.3 测试结果 二、全局异常处理 2.1 一个有异常的控制器类 2.2 全局异常处理器类 2.3 测试结果  三、自定义异常处理器 3.1 自定义异常处理器 3.2 测试结果 往期专栏文章相关导读  1. Maven系列专栏文章 2. Mybatis系列

    2024年02月16日
    浏览(46)
  • Spring异常处理器

     问题:   程序允许不免的在各层都可能会产生异常,我们该如何处理这些异常? 如果只是在方法里面单独使用 try… catch… 语句去一个一个的进行捕捉处理的话,那毫无疑问是不现实的,因为异常数量是非常庞大的并且对于异常的出现种类是不可预料的,于是我们可以使用

    2024年02月13日
    浏览(46)
  • Spring MVC 异常处理器

    如果不加以异常处理,错误信息肯定会抛在浏览器页面上,这样很不友好,所以必须进行异常处理。 系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: 编写controller 在index.jsp里面定义超链接

    2024年01月22日
    浏览(45)
  • Spring MVC配置全局异常处理器!!!

    为什么要使用全局异常处理器:如果不加以异常处理,错误信息肯定会抛在浏览器页面上,这样很不友好,所以必须进行异常处理。 系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: 结果展示:  

    2024年01月15日
    浏览(45)
  • spring框架_常见工厂后处理器

    ConfigurationClassPostProcessor :用于解析@ComponentScan @Bean @Import @ImportResource MapperSacnnerConfigurer :相当于Mybatis的@MapperScanner 用于解析被标注的@Mapper接口 @mapper 注解的解析:@mapper注解是mybatis提供的,用于标明一个接口,spring自然无法管理接口,要将这个接口转化为一个bean加入到beanfa

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包