前言
ApplicationContext接口体系
MessageSource
public interface MessageSource {
String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);
String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;
String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
}
EnvironmentCapable
public interface EnvironmentCapable {
Environment getEnvironment();
}
HierarchicalBeanFactory 与 ListableBeanFactory
ApplicationEventPublisher
public interface ApplicationEventPublisher {
default void publishEvent(ApplicationEvent event) {
publishEvent((Object) event);
}
void publishEvent(Object event);
}
ResourcePatternResolver
public interface ResourcePatternResolver extends ResourceLoader {
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
Resource[] getResources(String locationPattern) throws IOException;
}
ApplicationContext
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
String getId();
String getApplicationName();
String getDisplayName();
long getStartupDate();
ApplicationContext getParent();
AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}
Lifecycle
public interface Lifecycle {
void start();
void stop();
boolean isRunning();
}
Closeable
public interface Closeable extends AutoCloseable {
public void close() throws IOException;
}
ConfigurableApplicationContext
- BeanFactoryPostProcessor接口及子接口BeanDefinitionRegistryPostProcessor是spring ApplicationContext一个非常重要的一个体系,spring-boot使用spi体系,就应该废除这个体系了。
- ApplicationListener 事件执行
- ProtocolResolver,用于对加载的资源进行处理
- refresh方法是核心方法,会有一节专门说。
- isActive方法是确定ApplicationContext是否正常启动。
public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {
void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor);
void addApplicationListener(ApplicationListener<?> listener);
void addProtocolResolver(ProtocolResolver resolver);
void refresh() throws BeansException, IllegalStateException;
void registerShutdownHook();
boolean isActive();
}
ConfigurableWebApplicationContext
public interface ConfigurableWebApplicationContext extends WebApplicationContext, ConfigurableApplicationContext {
void setServletContext(ServletContext servletContext);
void setServletConfig(ServletConfig servletConfig);
ServletConfig getServletConfig();
void setNamespace(String namespace);
String getNamespace();
void setConfigLocation(String configLocation);
void setConfigLocations(String... configLocations);
String[] getConfigLocations();
}
非ApplicationContext接口继承的其他接口体系
AnnotationConfigRegistry接口
public interface AnnotationConfigRegistry {
void register(Class<?>... annotatedClasses);
void scan(String... basePackages);
}
ApplicationContext 实现体系
资源加载的维度
加载xml文件
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- XmlWebApplicationContext
- GenericXmlApplicationContext
加载groovy语言的文件
- GroovyWebApplicationContext
- GenericGroovyApplicationContext
加载annitation
- AnnotationConfigApplicationContext
- AnnotationConfigWebApplicationContext
手动注入bean
- GenericApplicationContext
- ResourceAdapterApplicationContext
- StaticApplicationContext
- StaticWebApplicationContext
使用环境维度
web应用
- AnnotationConfigWebApplicationContext
- AnnotationConfigApplicationContext
- GenericWebApplicationContext
- StaticWebApplicationContext
正常项目维度
Refreshable
Refreshable特性
- AnnotationConfigWebApplicationContext
- GroovyWebApplicationContext
- XmlWebApplicationContext
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
非Refreshable特性
晕了吧