概念
Context也就是我们常说的spring容器,打个比方,context就像是一家公司,beans则是公司的工厂,除了工厂,公司还有翻译,仓库以及办公场所等等。
下面就看看context的主要构成部件。
Context构成部件
上图是ApplicationContext的实体静态结构,它继承了六个实体。虽然是继承,但其实context和他们的关系更像是聚合。Spring使用继承主要是为了在context上也同时体现这6个实体的特征。在实现层面,context事实上是个包装类,最终通过聚合的实体类完成相应行为,而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;
}
ApplicationContext的实质功能都是继承于以下6个实体:
MessageSource: 用于国际化的接口,可以将其理解为公司的翻译。用户可以通过bean配置自定义MessageSource–要求name为“messageSource”,spring会在容器refresh时自动探测并且初始化它。
ApplicationEventPublisher: 用于发布应用事件,例如ContextRefreshed,stopped, started等。它就像是企业邮箱,通过它可以接收到公司的事件通知。用户通过配置ApplicationListener类型的bean即可订阅这类事件,spring通过getBean