前言

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

  1. BeanFactoryPostProcessor接口及子接口BeanDefinitionRegistryPostProcessor是spring ApplicationContext一个非常重要的一个体系,spring-boot使用spi体系,就应该废除这个体系了。
  2. ApplicationListener 事件执行
  3. ProtocolResolver,用于对加载的资源进行处理
  4. refresh方法是核心方法,会有一节专门说。
  5. 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文件
  1. ClassPathXmlApplicationContext
  2. FileSystemXmlApplicationContext
  3. XmlWebApplicationContext
  4. GenericXmlApplicationContext
加载groovy语言的文件
  1. GroovyWebApplicationContext
  2. GenericGroovyApplicationContext
加载annitation
  1. AnnotationConfigApplicationContext
  2. AnnotationConfigWebApplicationContext
手动注入bean
  1. GenericApplicationContext
  2. ResourceAdapterApplicationContext
  3. StaticApplicationContext
  4. StaticWebApplicationContext

使用环境维度

web应用
  1. AnnotationConfigWebApplicationContext
  2. AnnotationConfigApplicationContext
  3. GenericWebApplicationContext
  4. StaticWebApplicationContext

正常项目维度

Refreshable

Refreshable特性

  1. AnnotationConfigWebApplicationContext
  2. GroovyWebApplicationContext
  3. XmlWebApplicationContext
  4. ClassPathXmlApplicationContext
  5. FileSystemXmlApplicationContext

非Refreshable特性

晕了吧

04-23 02:28