5. Types of ApplicationContext
Spring provides different types of ApplicationContext containers suitable for different requirements
. These are implementations of the ApplicationContext interface
. So let's take a look at some of the common types of ApplicationContext.
5.1. AnnotationConfigApplicationContext
AnnotationConfigApplicationContext class was introduced in Spring 3.0.
It can take classes annotated with @Configuration, @Component, and JSR-330 metadata as input.
dart
ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class);
AccountService accountService = context.getBean(AccountService.class);
5.2. AnnotationConfigWebApplicationContext
AnnotationConfigWebApplicationContext is a web-based variant of AnnotationConfigApplicationContext.
We may use this class when we configure Spring's ContextLoaderListener
servlet listener or a Spring MVC DispatcherServlet
in a web.xml file.
Moreover, from Spring 3.0 onward, we can also configure this application context container programmatically. All we need to do is implement the WebApplicationInitializer interface:
dart
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
}
}
5.3. XmlWebApplicationContext
If we use the XML based configuration in a web application, we can use the XmlWebApplicationContext class.
As a matter of fact, configuring this container is like the AnnotationConfigWebApplicationContext class only, which means we can configure it in web.xml, or implement the WebApplicationInitializer interface:
dart
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
}
}
5.4. FileSystemXMLApplicationContext
We use the FileSystemXMLApplicationContext class to load an XML-based Spring configuration file from the file system or from URLs. This class is useful when we need to load the ApplicationContext programmatically. In general, test harnesses and standalone applications are some of the possible use cases for this.
For example, let's see how we can create this Spring container and load the beans for our XML-based configuration:
dart
String path = "C:/myProject/src/main/resources/applicationcontext/account-bean-config.xml";
ApplicationContext context = new FileSystemXmlApplicationContext(path);
AccountService accountService = context.getBean("accountService", AccountService.class);
5.5. ClassPathXmlApplicationContext
In case we want to load an XML configuration file from the classpath, we can use the ClassPathXmlApplicationContext class. Similar to FileSystemXMLApplicationContext, it's useful for test harnesses, as well as application contexts embedded within JARs.
So let's see an example of using this class:
dart
ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/account-bean-config.xml");
AccountService accountService = context.getBean("accountService", AccountService.class);