ApplicationContext
ApplicationContext是Spring的高级容器。
与BeanFactory类似,它可以加载bean定义并根据请求分发bean;此外,它还添加了很多特定的功能,比如:从属性文件解析文本消息、将应用程序事件发布到感兴趣的事件侦听器。
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
}
Spring提供了适合不同需求的ApplicationContext,每个应用程序上下文可以拥有多个配置文件、配置类或两者的混合,相关类图见下图:
ConfigurableApplicationContext
ConfigurableApplicationContext 扩展自 ApplicationContext,新增了 reflesh() 和 close() 这两个方法,使得其具有启动、刷新和关闭应用上下文的能力:
(1)在应用上下文关闭的情况下调用 refresh() 即可启动应用上下文;在应用上下文启动的情况下调用 reflesh() 即可清除缓存并且重新装载配置信息;
(2)调用 close() 方法则可以关闭应用上下文。
AbstractApplicationContext 等子类实现了 refresh() 方法
ApplicationContext实现类
FileSystemXmlApplicationContext
通过FileSystemXmlApplicationContext
可以从文件系统或url加载基于XML的Spring配置文件。
应用代码如下:
String path = "D:/source/Test/src/main/resources/applicationcontext/bean-config.xml";
ApplicationContext context = new FileSystemXmlApplicationContext(path);
AccountService accountService = context.getBean("accountService", AccountService.class);
ClassPathXmlApplicationContext
通过ClassPathXmlApplicationContext
可以从类路径加载基于XML的Spring配置文件。
应用代码如下:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/bean-config.xml");
AccountService accountService = context.getBean("accountService", AccountService.class);
AnnotationConfigApplicationContext
AnnotationConfigApplicationContext是在Spring 3.0中引入的(与@Configuration、@Component和JSR-330元数据注释等一起工作)。
应用代码如下:
ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class);
AccountService accountService = context.getBean(AccountService.class);
ConfigurableWebApplicationContext
AnnotationConfigWebApplicationContext
AnnotationConfigWebApplicationContext是AnnotationConfigApplicationContext的一个基于web的变体。
从Spring 3.0开始,可以通过编程方式配置ApplicationContext,开发人员需要做的是实现WebApplicationInitializer接口。
public class MyWebApplicationInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AccountConfig.class);
context.setServletContext(container);
// servlet configuration
}
}
XmlWebApplicationContext
如果在web应用程序中使用基于XML的配置可以使用XmlWebApplicationContext;类似AnnotationConfigWebApplicationContext,可以通过实现WebApplicationInitializer接口来配置应用程序。
应用代码如下:
public class MyXmlWebApplicationInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocation("/WEB-INF/spring/applicationContext.xml");
context.setServletContext(container);
// Servlet configuration
}
}
标签:ApplicationContext,AccountService,Spring,context,上下文,class From: https://www.cnblogs.com/xfeiyun/p/17842148.html