SpringIOC容器初始化源码解析(1)—— PostProcessor(1)

之前在分析资源定位、加载、解析、注册链路时,AbstractApplicationContext的refresh()方法中调用了invokeBeanFactoryPostProcessors(beanFactory);,去执行容器级别的后置处理器

请添加图片描述

这个接口继承了BeanFactoryPostProcessor,所以也是一种特殊的BeanFactoryPostProcessor。里面有唯一一个方法,需要在方法体里创建出BeanDefinition实例,然后通过传入的registry将BeanDefinition注册到Registry对象里。


顺着上面的思路,可以新建一个postprocessor包,并创建一个自定义的类,实现BeanDefinitionRegistryPostProcessor。

package com.wjw.postprocessor;

import com.wjw.entity.User;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

import org.springframework.beans.factory.support.BeanDefinitionBuilder;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;

import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;

import org.springframework.beans.factory.support.GenericBeanDefinition;

import org.springframework.context.annotation.Configuration;

@Configuration

public class CustomizedBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

Class<?> clazz = User.class;

// 用于创建BeanDefinition实例

BeanDefinitionBuilder builder =BeanDefinitionBuilder.genericBeanDefinition(clazz);

// 创建BeanDefinition实例

GenericBeanDefinition definition = (GenericBeanDefinition) builder.getRawBeanDefinition();

registry.registerBeanDefinition(“user5”, definition);

}

@Override

public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

}

}

之后在程序入口尝试获取这个名为user5的bean

请添加图片描述

请添加图片描述

我们可以在这个后置处理器中去加载第三方bean以复用他们的能力(Mybatis)

BeanFactoryPostProcessor

======================================================================================

既然BeanDefinitionRegistryPostProcessor负责对BeanDefinition实例的自定义注册,剩下的两个后置处理的作用主要就是影响容器里的行为了。

请添加图片描述

该接口也是只有一个方法,该方法是在refresh()方法中的invokeBeanFactoryPostProcessors方法中被执行的。

BeanPostProcessor

===============================================================================

package org.springframework.beans.factory.config;

import org.springframework.beans.BeansException;

import org.springframework.lang.Nullable;

public interface BeanPostProcessor {

@Nullable

default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

return bean;

}

@Nullable

default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

return bean;

}

}

该接口由两个回调方法组成,对于用容器创建的bean实例,BeanPostProcessor都会在调用容器初始化之前以及在任何bean初始化回调之后,都从容器获得回调执行,对应的就是上面两个方法。

例子:

package com.wjw.postprocessor;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

import org.springframework.context.annotation.Configuration;

@Configuration

public class CustomizedBeanPostProcessor implements BeanPostProcessor {

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException{

System.out.println(beanName + "----- postProcessBeforeInitialization() ");

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

niTwS-1714469456323)]

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-270eNnq2-1714469456323)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-19tMJfzT-1714469456323)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值