核心抽象类的职责
-
ApplicationContext :是整个容器的基本功能定义类。
ApplicationContext子继承图- ConfigurableApplicationContext:大部分的应用上下文都实现了该接口
-
WebApplicationContext:在web应用程序中使用
-
ConfigurableApplicationContext
ConfigurableApplicationContext父继承图- Closeable:接口用于关闭流并且释放与其相关的任何方法,如果流已被关闭,那么调用此方法没有效果。
public void close() throws IOException; //释放
- Lifecycle:接口对容器生命周期进行控制。
void start(); //启动组件 void stop(); //同步方法停止组件 void isRunning(); //判断组件是否启动
-
ConfigurableApplicationContext
- ConfigurableApplicationContext:接口方法
void setId(String id); // 设置应用上下文唯一的id void setParent(ApplicationContext parent); // 设置应用程序上下文的父级 void setEnvironment(ConfigurableEnvironment environment); // 设置应用上下文的环境 ConfigurableEnvironment getEnvironment(); // 获取应用上下文的环境 // 添加一个新的BeanFactoryPostProcessor void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor); // 添加应用程序监听器 void addApplicationListener(ApplicationListener<?> listener); // 添加协议解析器,可能会覆盖默认的规则 void addProtocolResolver(ProtocolResolver resolver); // 加载或者刷新配置 void refresh() throws BeansException, IllegalStateException; // 向JVM runtime注册一个关闭钩子,JVM关闭时关闭这个上下文 void registerShutdownHook(); // 应用程序上问下是否是激活状态 boolean isActive(); // 获取应用上下文内部的bean factory ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;
- AbstractApplicationContext :是整个容器核心处理类,是spring容器真正的执行者,实现了spring 的启动、停止、刷新、时间推送等,主要方法如下。
// 刷新BeanFactory,用于执行实际的配置加载,该方法在其他的初始化工作之前被refresh()方法调用
protected abstract void refreshBeanFactory() throws BeansException, IllegalStateException;
// 关闭BeanFactory,用于释放内部使用的BeanFactory·
protected abstract void closeBeanFactory();
// 获取内部使用的BeanFactory
public abstract ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;
-
GenericApplicationContext :
GenericApplicationContext
继承自AbstractApplicationContext
,是为通用目的设计的,能加载各种配置文件,例如xml,properties等等。它的内部持有一个DefaultListableBeanFactory
的实例,实现了BeanDefinitionRegistry
接口,并且没有假设一个特定的bean definition
的format。实现了BeanDefinitionRegistry
接口以允许配置任何bean definition reader
。为了能够注册bean的定义,refresh()只允许调用一次。
GenericApplicationContext ctx = new GenericApplicationContext();
//使用XmlBeanDefinitionReader
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
//加载ClassPathResource
xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(ctx);
propReader.loadBeanDefinitions(new ClassPathResource("myBeans.properties"));
//调用Refresh方法
ctx.refresh();
//和其他ApplicationContext方法一样的使用方式
User user= (User) ctx.getBean("User");
-
WebApplicationContext :
WebApplicationContext
是专门为web应用准备的,他允许从相对于web根目录的路劲中装载配置文件完成初始化工作,从WebApplicationContext
中可以获得ServletContext
的引用,整个Web应用上下文对象将作为属性放置在ServletContext
中,以便web应用可以访问spring上下文,spring中提供WebApplicationContextUtils
的getWebApplicationContext(ServletContext src)
方法来获得WebApplicationContext
对象 -
ConfigurableWebApplicationContext:
ConfigurableWebApplicationContext
继承自WebApplicationContext
和ConfigurableApplicationContext
,提供了web应用上下文的可配置的能力。相关接口定义如下:
// 设置web应用上下文的ServletContext
void setServletContext(@Nullable ServletContext servletContext);
// 设置web应用上下文的ServletConfig
void setServletConfig(@Nullable ServletConfig servletConfig);
// 获取web应用上下文的ServletConfig
ServletConfig getServletConfig();
// 设置web应用上下文的命名空间
void setNamespace(@Nullable String namespace);
// 获取web应用上下文的命名空间
String getNamespace();
// 以初始化参数的形式设置web应用上下文的配置文件位置
void setConfigLocation(String configLocation);
// 设置web应用上下文的配置文件的位置
void setConfigLocations(String... configLocations);
// 获取web应用上下文的配置文件位置
String[] getConfigLocations();
网友评论