Spring源码之ConfigurableApplicationContext

 2019-11-02 21:26  阅读(2891)
文章分类:Spring boot

20191102100828\_1.png

ConfigurableEnvironment提供设置活动和默认配置文件以及操作底层属性源的工具。

BeanFactoryPostProcessor :允许自定义修改应用程序上下文的bean定义,调整上下文的底层bean工厂的bean属性值。应用程序上下文可以在它们的bean定义中自动检测BeanFactoryPostProcessor bean,并在创建任何其他bean之前应用它们。BeanFactoryPostProcessor可以与bean定义交互和修改,但从不实例化bean。因为这样做可能导致过早BEAN实例化,违反容器,并造成意想不到的副作用。如果需要与bean实例交互,建议实现BeanPostProcessor。

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;在标准初始化后修改应用程序上下文的内部bean工厂。所有bean定义都将被加载,但是没有bean会被实例化。这允许重写或添加属性,即使是急于初始化的bean。

ProtocolResolver:协议专用资源句柄的解析策略。用作{@link DefaultResourceLoader}的SPI,允许在不对加载器实现(或应用程序上下文实现)进行子类的情况下处理自定义协议。

Resource resolve(String location, ResourceLoader resourceLoader);如果此实现的协议匹配,则解析给定的资源加载器的给定位置。

ConfigurableListableBeanFactory :配置接口由最大多数的bean工厂来实现。基于{@link ConfigurableBeanFactory},它还提供了分析和修改bean定义以及预实例化单例的工具。

ApplicationListener :父类EventListener,用于被应用的事件监听器实现,基于{@code java.util.EventListener} 接口的观察者模式的实现,从Spring3.0开始ApplicationListener可以声明它感兴趣的事件类型,当在Spring ApplicationContext中注册时,将相应地过滤事件,只调用侦听器来匹配事件对象。

void onApplicationEvent(E event);处理应用程序事件。

ConfigurableApplicationContext:父类 Lifecycle, Closeable,ApplicationContext

SPI接口由大多数甚至不是所有的应用程序上下文来实现。除了{@link org.springframework.context.ApplicationContext}接口中的应用程序上下文客户端方法之外,还提供配置应用程序上下文的工具。配置和生命周期方法被封装在这里,以避免使它们对ApplicationContext client暴露,本方法仅适用于启动和关闭代码。

void setId(String id);设置此应用程序上下文的唯一ID。

void setParent(ApplicationContext parent);设置此应用程序上下文的父级。注意父级不应该被改变:只有在创建该类的对象时(例如,在WebApplicationContext设置中)该对象不可用时,才应该在构造函数之外设置它。

void setEnvironment(ConfigurableEnvironment environment);为这个应用程序上下文设置{@code Environment}

ConfigurableEnvironment getEnvironment();以可配置的形式返回此应用程序上下文的{@code Environment},允许进一步自定义。

void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor);添加一个新的BeanFactoryPostProcessor,该处理器将在refresh时应用于应用程序上下文的内部bean工厂,在任何bean定义得到评估之前。在上下文配置期间调用。

void addApplicationListener(ApplicationListener<?> listener);添加一个新的ApplicationListener,它将被通知上下文事件,例如上下文刷新和上下文关闭。注意,如果上下文没有激活或者在当前活动多播的情况下,在已经激活的上下文中,注册在这里的任何ApplicationListener都将应用于refresh。

void addProtocolResolver(ProtocolResolver resolver);注册这个应用程序上下文给定的协议解析器,允许处理额外的资源协议。任何此类解析器都将在该上下文的标准归结规则之前调用。

void refresh() throws BeansException, IllegalStateException;加载或刷新配置的持久表示,该表示可以是XML文件、属性文件或关系数据库模式。由于这是一种启动方法,如果失败,它应该销毁已经创建的单体,以避免浪费资源。换言之,在调用该方法之后,所有实例化的或不需要的单实例化都应该被实例化。

void registerShutdownHook();向JVM运行时注册一个关闭挂钩,在关闭JVM时关闭此上下文,除非此时已经关闭。

void close();关闭此应用程序上下文,释放实现可能持有的所有资源和锁。这包括销毁所有缓存的单例bean。注意:不要在父上下文执行此方法,父上下文有它们自己的、独立的生命周期。这种方法可以多次调用而无副作用:随后在一个已经关闭的上下文调用 此处方法将会被忽略。

boolean isActive();标识上下文是否激活,也就是说,它是否刷新了至少一次,还没有被关闭。

ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;返回此上下文内部的Bean工厂,可以用来访问底层工厂的特定功能。注意:不要用这个方法对bean工厂进行后处理,单例之前就已经被初始化了。在Bean被触碰到之前用BeanFactoryPostProcessor去拦截Bean工厂的设置过程。通常情况下,内部工厂只能在上下文激活时被访问,也就是说,介于{@link #refresh()}和{@link #close()}之间。{@link #isActive()}标志可用于检查上下文是否处于适当的状态。允许客户端通过{@link ConfigurablePropertyResolver}超接口设置和验证所需的属性、自定义转换服务等。


来源:http://ddrv.cn

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring源码之ConfigurableApplicationContext

相关推荐