关于Spring中几种常见接口执行顺序比较

执行顺序:

静态代码块 > 构造方法 > BeanFactoryAware > ApplicationContextAware > @PostConstruct > InitializingBean > InstantiationAwareBeanPostProcessor > BeanPostProcessor > ApplicationRunner

java 复制代码
/**
 * 执行顺序:
 * 静态代码块 > 构造方法 > BeanFactoryAware > ApplicationContextAware > @PostConstruct > InitializingBean > InstantiationAwareBeanPostProcessor > BeanPostProcessor > ApplicationRunner
 * */
@Component
public class BeanPostProcessorTest implements BeanPostProcessor, InitializingBean, BeanFactoryAware, ApplicationContextAware, InstantiationAwareBeanPostProcessor, ApplicationRunner {
    static Integer count = 1;
    public BeanPostProcessorTest(){
        System.out.println(count++ + "构造函数初始化...");
    }
    static {
        System.out.println(count++ + "静态代码块...");
    }

    @PostConstruct
    public void init(){
        System.out.println(count++ + "PostConstruct...");
    }
    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        System.out.println(count++ + "InstantiationAwareBeanPostProcessor-> postProcessBeforeInstantiation...");

        return InstantiationAwareBeanPostProcessor.super.postProcessBeforeInstantiation(beanClass, beanName);
    }

    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        System.out.println(count++ + "InstantiationAwareBeanPostProcessor-> postProcessAfterInstantiation...");

        return InstantiationAwareBeanPostProcessor.super.postProcessAfterInstantiation(bean, beanName);
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        // 在 Bean 初始化之前添加逻辑
        System.out.println(count++ + "BeanPostProcessor-> postProcessBeforeInitialization...");
        return bean; // 返回原始或修改后的 Bean
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println(count++ + "BeanPostProcessor-> postProcessAfterInitialization...");

        // 在 Bean 初始化之后添加逻辑
        return bean; // 返回原始或修改后的 Bean
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println(count++ + "BeanFactoryAware-> setBeanFactory...");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println(count++ + "InitializingBean-> afterPropertiesSet...");
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println(count++ + "ApplicationContext-> setApplicationContext...");

    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(count++ + "ApplicationRunner-> run...");
    }
}
相关推荐
编程小白gogogo35 分钟前
Spring学习笔记
笔记·学习·spring
好名字更能让你们记住我1 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
门思科技1 小时前
设计可靠 LoRaWAN 设备时需要考虑的关键能力
运维·服务器·网络·嵌入式硬件·物联网
小锋学长生活大爆炸1 小时前
【知识】RPC和gRPC
服务器·网络协议·rpc
harmful_sheep1 小时前
Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
java·spring·缓存
学习编程的gas1 小时前
Linux开发工具——gcc/g++
linux·运维·服务器
大大。1 小时前
van-tabbar-item选中active数据变了,图标没变
java·服务器·前端
嵌入式成长家1 小时前
ubuntu rules 使用规则
linux·ubuntu·rules 使用规则
_可乐无糖1 小时前
AWS WebRTC: 判断viewer端拉流是否稳定的算法
linux·服务器·webrtc·aws
数据智能老司机1 小时前
Linux内核编程——Linux设备模型
linux·架构·操作系统