Spring IOC容器提供的扩展接口

前言

了解Spring容器的扩展点可以帮助我们完成特定任务,如何精通 Spring 就看你有没有掌握好 Spring 有哪些扩展点。 Spring
Ioc 容器主要有这么几个拓展点:BeanFactoryPostProcessor和BeanPostProcessor,他们分别是在构建
BeanFactory 和构建 Bean 对象时调用;还有就是 InitializingBean 和 DisposableBean,
他们分别是在 Bean 实例创建和销毁时被调用。用户可以实现这些接口中定义的方法,Spring 就会在适当的时候调用他们。还有一个是
FactoryBean 他是个特殊的 Bean,这个 Bean 可以被用户更多的控制

1. BeanPostProcessor简介

BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口。接口声明如下:

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;
    }
}

运行顺序

=Spring IOC容器实例化Bean=
=调用BeanPostProcessor的postProcessBeforeInitialization方法=
=调用bean实例的初始化方法=
=调用BeanPostProcessor的postProcessAfterInitialization方法=

2. BeanFactoryPostProcessor简介

BeanFactoryPostProcessor接口和BeanPostProcessor原理一致,Spring提供了对BeanFactory进行操作的处理器BeanFactoryProcessor,简单来说就是获取容器BeanFactory,这样就可以在真正初始化bean之前对bean做一些处理操作。bean工厂的bean属性处理容器,说通俗一些就是可以管理我们的bean工厂内所有的beandefinition(未实例化)数据,可以随心所欲的修改属性。
简单来说就是在工厂里所有的bean被加载进来后但是还没初始化前,对所有bean的属性进行修改也可以add属性值。

@FunctionalInterface
public interface BeanFactoryPostProcessor {
    void postProcessBeanFactory(ConfigurableListableBeanFactory var1) throws BeansException;
}

3. InitializingBean

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。

public interface InitializingBean {
    void afterPropertiesSet() throws Exception;
}

4. DisposableBean

在Bean生命周期结束前调用destory()方法做一些收尾工作

public interface DisposableBean {
    void destroy() throws Exception;
}

Bean的生命周期

在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean
就能够使用了。一旦bean不再被使用,则由Java自动进行垃圾回收。

相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要

Spring IOC容器提供的扩展接口

上一篇:spring 注解学习 二spring bean的生命周期


下一篇:spring中BeanPostProcessor 实现策略模式