Spring可扩展接口总结

容器刷新前的SpringFactories扩展

  1. Spring启动过程监听扩展接口:SpringApplicationRunListener,实现案例:事件发布器EventPublishingRunListener

    	default void starting() {}
    	default void environmentPrepared(ConfigurableEnvironment environment) {}
    	default void contextPrepared(ConfigurableApplicationContext context) {}
    	default void contextLoaded(ConfigurableApplicationContext context) {}
    	default void started(ConfigurableApplicationContext context) {}
    	default void running(ConfigurableApplicationContext context) {}
    	default void failed(ConfigurableApplicationContext context, Throwable exception) {}
    
  2. Spring事件监听器,就是(1)EventPublishingRunListener每种事件的再一次扩展:ApplicationListener,根据类型ApplicationEvent事件类型区分。

    public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
    	void onApplicationEvent(E event);
    }
    
  3. ApplicationEnvironmentPreparedEvent环境准备事件有实现类BootstrapApplicationListenerConfigFileApplicationListener,其中ConfigFileApplicationListener监听了事件后还有一个后置处理扩展类:EnvironmentPostProcessor

    public interface EnvironmentPostProcessor {
    
    
    	void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application);
    }
    
  4. SpringBootExceptionReporter异常通知器,实现FailureAnalyzer接或者AbstractFailureAnalyzer抽象类处理Spring启动过程中的制定异常。

  5. 容器初始化扩展:ApplicationContextInitializer和容器准备事件的前一步触发
    在这里插入图片描述

    public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {
    
    	/**
    	 * Initialize the given application context.
    	 * @param applicationContext the application to configure
    	 */
    	void initialize(C applicationContext);
    
    }
    

容器刷新中的可扩展功能

在容器刷新周期的可扩展功能,根据执行顺序和,接口的最顶级记录

BeanFactoryPostProcessors工厂的后置处理扩展接口

  • BeanFactoryPostProcessorBeanFactory后置处理

    public interface BeanFactoryPostProcessor {
    	void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
    }
    
  • BeanDefinitionRegistryPostProcessorBeanDefinitionRegistry后置处理

    public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {
    	void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException
    }
    

Bean创建的相关可扩展处理器

  • InstantiationAwareBeanPostProcessor对象创建前的后置处理器,发生在doCreateBean之前,给对象一个机会提前返回对象。下面源码只放出相关的可扩展方法

    public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
    	@Nullable
    	default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
    		return null;
    	}
    	default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
    		return true;
    	}
    	......省略不相关方法
    }
    
  • SmartInstantiationAwareBeanPostProcessordetermineCandidateConstructors方法发生在实例对象创建的时候,用来获取对象的构造函数。

    	default Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName)
    			throws BeansException {
    
    		return null;
    	}
    
  • MergedBeanDefinitionPostProcessorpostProcessMergedBeanDefinition的方法,发生在对象刚创建之后,还有没填充属性之前。

    	void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName);
    
  • populateBean填充属性方法中会先执行InstantiationAwareBeanPostProcessorpostProcessAfterInstantiation后置处理操作。

    	default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
    		return true;
    	}
    
  • populateBean开始填充前,会执行InstantiationAwareBeanPostProcessorpostProcessPropertyValues方法进行对象属性的扩展。可以返回扩展的属性填充配置,然后开始正式的属性填充

    	default PropertyValues postProcessPropertyValues(
    			PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {
    
    		return pvs;
    	}
    
  • 对象的初始化,先执行三个Aware接口BeanNameAwareBeanClassLoaderAwareBeanFactoryAware。然后执行初始化逻辑,执行顺序如下:

    1、BeanPostProcessorpostProcessBeforeInitialization初始化前处逻辑
    2、InitializingBeanafterPropertiesSet方法,或者执行BeanDefinitioninitMethodName方法。
    3、BeanPostProcessorpostProcessAfterInitialization初始化后置逻辑

  • 对象初始化完就算创建了,然后根据有没有实现DisposableBeanAutoCloseable或者设置destroyMethodName参数决定是否创建DisposableBean,它会在容器销毁的时候调用对应的销毁方法。

  • 在全部单例对象都创建完后,会判断对象有没有实现SmartInitializingSingleton这个接口,如果有会调用它的afterSingletonsInstantiated方法。

    public interface SmartInitializingSingleton {
    	void afterSingletonsInstantiated();
    }
    

容器刷新后的可扩展功能

单例对象创建完后呢会调用finishRefresh完成容器刷新的收尾工作。

  • 会先执行生命周期的后置处理器LifecycleProcessoronRefresh方法,可以自己定义注入。默认有一个DefaultLifecycleProcessor实现类。在默认的实现类里面可以 实现Lifecycle接口在容器对象创建好后调用,和容器关闭的时候调用,执行生命周期内的处理逻辑。还有进一步扩展的SmartLifecycle的接口。

    public interface Lifecycle {
    	void start();
    	void stop();
    	boolean isRunning();
    }
    

收尾扩展

  • 在容器启动后,用启动参数执行以下ApplicationRunnerCommandLineRunner这两个接口的后置处理逻辑。

    public interface ApplicationRunner {
    
    	void run(ApplicationArguments args) throws Exception;
    
    }
    public interface CommandLineRunner {
    
    
    	void run(String... args) throws Exception;
    
    }
    

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值