Spring Application Context
The Spring Application Context is a central interface to the Spring IoC container. It provides configuration information and manages the lifecycle of beans in a Spring application. This guide covers the key concepts, types, and features of the Spring Application Context.
What is Application Context?
The Application Context is a sophisticated container that provides all the functionality of BeanFactory, plus additional features such as event propagation, declarative mechanisms to create a bean, and various means to look up. It is the central interface to the Spring IoC container and is used to manage beans in a Spring application.
Types of Application Context
Spring provides several implementations of the Application Context interface to suit different needs:
- ClassPathXmlApplicationContext: Loads context definition from an XML file located in the classpath.
- FileSystemXmlApplicationContext: Loads context definition from an XML file in the file system.
- AnnotationConfigApplicationContext: Loads context definition from Java-based configuration classes annotated with
@Configuration
. - WebApplicationContext: A specialized version of the Application Context for web applications.
Loading Application Context
Depending on the type of application context you use, you load it in different ways:
ClassPathXmlApplicationContext
// Loading context from classpath XML
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
FileSystemXmlApplicationContext
// Loading context from file system XML
ApplicationContext context = new FileSystemXmlApplicationContext("C:/path/to/applicationContext.xml");
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
AnnotationConfigApplicationContext
// Loading context from Java-based configuration
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
Bean Definition and Retrieval
Beans are defined in the configuration file (XML or Java-based) and retrieved from the application context:
// applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myBean" class="com.example.MyBean"/>
</beans>
// AppConfig.java
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
// Retrieving beans
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
ApplicationContext javaContext = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean javaBean = javaContext.getBean(MyBean.class);
javaBean.doSomething();
Event Handling
The Application Context supports event handling, allowing beans to publish and listen to events:
// Custom event
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
}
// Event publisher
@Component
public class MyEventPublisher {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void publishEvent() {
MyEvent myEvent = new MyEvent(this);
applicationEventPublisher.publishEvent(myEvent);
}
}
// Event listener
@Component
public class MyEventListener implements ApplicationListener {
@Override
public void onApplicationEvent(MyEvent event) {
System.out.println("Received event: " + event);
}
}
// Publishing and listening to events
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyEventPublisher publisher = context.getBean(MyEventPublisher.class);
publisher.publishEvent();
Internationalization (i18n)
The Application Context supports internationalization by providing message sources for resolving messages:
// messages.properties
greeting=Hello, World!
// AppConfig.java
@Configuration
public class AppConfig {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
}
// Retrieving messages
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
String greeting = context.getMessage("greeting", null, Locale.ENGLISH);
System.out.println(greeting); // Output: Hello, World!
Key Points
- The Application Context is the central interface to the Spring IoC container, managing the lifecycle of beans.
- Spring provides various implementations of the Application Context, such as ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, and AnnotationConfigApplicationContext.
- Beans are defined in configuration files and retrieved from the Application Context.
- The Application Context supports event handling, allowing beans to publish and listen to events.
- The Application Context supports internationalization by providing message sources for resolving messages.
Conclusion
The Spring Application Context is a powerful and flexible mechanism for managing beans and their lifecycle in a Spring application. By leveraging its features, such as bean definition and retrieval, event handling, and internationalization, developers can create robust and maintainable applications. Happy coding!