ApplicationContext继承关系解析

概述

这次了解一下ApplicationContext的继承关系。尽管这样学习一次后不可能记住所有的类,但是对ApplicationContext有了一定的轮廓,不再是两眼一抹黑。


常用的ApplicationContext

  • SpringBoot中常用的两个ApplicationContext,主要有以下两个:
    • 常规应用:org.springframework.context.annotation.AnnotationConfigApplicationContext;
    • Web应用:org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext
  • 常用的ApplicationContext的主要功能
    • 包括消息解析、bean工厂的基本功能(bean的注册、实例化、初始化)、context中事件的发布、资源加载与解析、上下文配置、bean销毁等主要功能;

继承关系

这里写图片描述


各个类的作用

  • public interface EnvironmentCapable {……}
    • 作用:所有Spring应用程序上下文都是EnvironmentCapable,该接口主要用于在接受BeanFactory实例的框架方法中执行{@code instanceof}检查,这些实例可能实际上也可能不是ApplicationContext实例,以便在环境可用时与环境进行交互。
    • 方法
      • Environment getEnvironment();
  • public interface MessageSource {……}
    • 作用:用于解析消息的策略接口,支持此类消息的参数化和国际化。
    • 方法
      • String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
      • String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException;
      • String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
  • public interface ApplicationEventPublisher {……}
    • 作用:封装事件发布功能的接口。 用作{@link ApplicationContext}的超级接口。
    • 方法
      • void publishEvent(ApplicationEvent event);
      • void publishEvent(Object event);
  • public interface ResourcePatternResolver extends ResourceLoader {……}
    • 作用
      • 用于将位置模式(例如,Ant样式路径模式)解析为Resource对象的策略接口。
      • 这是{@link org.springframework.core.io.ResourceLoader}接口的扩展。 可以检查传入的ResourceLoader(例如,在上下文中运行时通过{@link org.springframework.context.ResourceLoaderAware}传入的{@link org.springframework.context.ApplicationContext})是否实现此扩展接口 太。 {@link PathMatchingResourcePatternResolver}是一个独立的实现,可以在ApplicationContext之外使用,也被{@link ResourceArrayPropertyEditor}用于填充Resource数组bean属性
    • 方法
      • String CLASSPATH_ALL_URL_PREFIX = “classpath*:”;
      • Resource[] getResources(String locationPattern) throws IOException;
  • public interface ResourceLoader {……}
    • 作用:用于加载资源的策略接口(例如,类路径或文件系统资源)。 需要{@link org.springframework.context.ApplicationContext}来提供此功能,以及扩展的{@link org.springframework.core.io.support.ResourcePatternResolver}支持。
    • 方法
      • ClassLoader getClassLoader();
      • Resource getResource(String location);
      • ClassLoader getClassLoader();
  • public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver {……}
    • 作用:用于为应用程序提供配置的中央接口。 这在应用程序运行时是只读的,但如果实现支持,则可以重新加载。
    • 方法
      • String getId();
      • String getApplicationName();
      • String getDisplayName();
      • long getStartupDate();
      • ApplicationContext getParent();
      • AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
  • public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {……}
    • 作用
      • SPI接口由大多数(如果不是全部)应用程序上下文实现。 除了{@link org.springframework.context.ApplicationContext}接口中的应用程序上下文客户端方法之外,还提供配置应用程序上下文的工具。
      • 这里封装了配置和生命周期方法,以避免使它们对ApplicationContext客户端代码显而易见。 本方法只能由启动和关闭代码使用
    • 方法
      • String CONFIG_LOCATION_DELIMITERS = “,; \t\n”;
      • String CONVERSION_SERVICE_BEAN_NAME = “conversionService”;
      • String LOAD_TIME_WEAVER_BEAN_NAME = “loadTimeWeaver”;
      • String ENVIRONMENT_BEAN_NAME = “environment”;
      • String SYSTEM_PROPERTIES_BEAN_NAME = “systemProperties”;
      • String SYSTEM_ENVIRONMENT_BEAN_NAME = “systemEnvironment”;
      • void setId(String id);
      • void setParent(ApplicationContext parent);
      • void setEnvironment(ConfigurableEnvironment environment);
      • ConfigurableEnvironment getEnvironment();
      • void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor);
      • void addApplicationListener(ApplicationListener< ?> listener);
      • void addProtocolResolver(ProtocolResolver resolver);
      • void refresh() throws BeansException, IllegalStateException;
      • void registerShutdownHook();
      • void close();
      • boolean isActive();
      • ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;
  • public interface Lifecycle {……}
    • 作用:定义启动/停止生命周期控制方法的通用接口。 这种情况的典型用例是控制异步处理。 注意:此接口并不意味着特定的自动启动语义。 考虑为此目的实施{@link SmartLifecycle}
      • 方法
      • void start();
      • void stop();
      • boolean isRunning();
  • public interface Closeable extends AutoCloseable {……}
    • 作用:{@code Closeable}是可以关闭的数据的来源或目的地。 调用close方法以释放对象所持有的资源(例如打开的文件)。
    • 方法
      • public void close() throws IOException;
  • public interface WebApplicationContext extends ApplicationContext {……}
    • 作用:用于为Web应用程序提供配置的接口。 这在应用程序运行时是只读的,但如果实现支持,则可以重新加载。
    • 方法
      • String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() +”.ROOT”;
      • String SCOPE_REQUEST = “request”;
      • String SCOPE_SESSION = “session”;
      • String SCOPE_GLOBAL_SESSION = “globalSession”;
      • String SCOPE_APPLICATION = “application”;
      • String SERVLET_CONTEXT_BEAN_NAME = “servletContext”;
      • String CONTEXT_PARAMETERS_BEAN_NAME = “contextParameters”;
      • String CONTEXT_ATTRIBUTES_BEAN_NAME = “contextAttributes”;
      • ServletContext getServletContext();
  • public interface DisposableBean {……}
    • 作用:要在销毁时释放资源的bean实现的接口。 如果BeanFactory处理缓存的单例,则应该调用destroy方法。 应用程序上下文应该关闭所有单例。
    • 方法
      • void destroy() throws Exception;
  • public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean {……}
    • 作用
      • {@link org.springframework.context.ApplicationContext}接口的抽象实现。 不要求用于配置的存储类型; 只需实现常见的上下文功能 使用Template Method设计模式,需要具体的子类来实现抽象方法。
      • 与普通BeanFactory相比,ApplicationContext应该检测在其内部bean工厂中定义的特殊bean:因此,该类自动注册{@link org.springframework.beans.factory.config.BeanFactoryPostProcessor BeanFactoryPostProcessors},{@ link org。 springframework.beans.factory.config.BeanPostProcessor BeanPostProcessors}和{@link org.springframework.context.ApplicationListener ApplicationListeners},它们在上下文中定义为bean。
  • public class DefaultResourceLoader implements ResourceLoader {……}
    • 作用:{@link ResourceLoader}接口的默认实现。 由{@link ResourceEditor}使用,并作为{@link org.springframework.context.support.AbstractApplicationContext}的基类。 也可以单独使用。
  • public interface BeanDefinitionRegistry extends AliasRegistry {……}
    • 作用:包含bean定义的注册表的接口,例如RootBeanDefinition和ChildBeanDefinition实例。 通常由BeanFactories实现,BeanFactories内部使用AbstractBeanDefinition层次结构
    • 方法
      • void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException;
      • void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
      • BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
      • boolean containsBeanDefinition(String beanName);
      • String[] getBeanDefinitionNames();
      • int getBeanDefinitionCount();
      • boolean isBeanNameInUse(String beanName);
  • public class GenericWebApplicationContext extends GenericApplicationContext implements ConfigurableWebApplicationContext, ThemeSource {……}
    • 作用:实现{@link org.springframework.web.context.ConfigurableWebApplicationContext},但不用于{@code web.xml}中的声明性设置。 相反,它是为程序设置而设计的,例如用于构建嵌套上下文或在Spring 3.1 {@link org.springframework.web.WebApplicationInitializer}中使用。
  • public interface ThemeSource {……}
    • 作用:由可以解析{@link Theme Themes}的对象实现的接口。 这使得给定“主题”的消息的参数化和国际化成为可能。
  • public class EmbeddedWebApplicationContext extends GenericWebApplicationContext {……}
    • 作用
      • 此上下文将通过在{@link ApplicationContext}本身内搜索单个{@link EmbeddedServletContainerFactory} bean来创建,初始化和运行{@link EmbeddedServletContainer}。 {@link EmbeddedServletContainerFactory}可以自由使用标准的Spring概念(例如依赖注入,生命周期回调和属性占位符变量)。
      • 此外,上下文中定义的任何{@link Servlet}或{@link Filter} bean都将自动注册到嵌入式Servlet容器中。 对于单个Servlet bean,将使用’/’映射。 如果找到多个Servlet bean,则小写bean名称将用作映射前缀。 名为’dispatcherServlet’的任何Servlet将始终映射到’/’。 过滤器bean将映射到所有URL(’/ *’)。
  • public class XmlEmbeddedWebApplicationContext extends EmbeddedWebApplicationContext {……}
    • 作用:{@link EmbeddedWebApplicationContext},它从XML文档获取其配置,由{@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader}解析
  • public class AnnotationConfigEmbeddedWebApplicationContext extends EmbeddedWebApplicationContext {……}
    • 作用:{@link EmbeddedWebApplicationContext}接受带注释的类作为输入 - 特别是{@link org.springframework.context.annotation.Configuration @Configuration}注释类,还有普通的{@link Component @Component}类和JSR-330兼容类 使用{@code javax.inject}注释。 允许逐个注册类(将类名指定为配置位置)以及类路径扫描(将基本包指定为配置位置)。

猜你喜欢

转载自blog.csdn.net/Growing_stu/article/details/82354272