Skip to content

Spring Application Context Lifecycle

The lifecycle of a Spring Application Context, specifically when using AnnotationConfigApplicationContext, follows a distinct sequence of creation, configuration, and activation.^[600-developer-java-spring-multipleapplicationcontext.md]

Initialization and Startup

The initialization process involves two distinct phases: creating the context instance and invoking refresh()[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. 1. Instantiation: A context object is created, often via a no-arg constructor or by passing configuration classes directly[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. 2. Registration: Beans are registered programmatically using registerBean() or register()[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. 3. Refresh: The refresh() method is called to process the configuration, instantiate beans, and activate the context[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md].

The status of the context can be checked using the isActive() method[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md].

Hierarchy and Visibility

Application Contexts can be organized into a hierarchy using the setParent(ApplicationContext parent) method[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. * Bean Visibility: A child context can access beans defined in itself, its parent, and its ancestors[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. * Isolation: Conversely, a parent context cannot access beans defined in its children[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md].

When a parent is set, the Environment of the parent is merged into the child context if the parent's environment is an instance of ConfigurableEnvironment[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md].

Shutdown

The lifecycle is concluded by closing the context, which triggers the destruction of singleton beans[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. * Closing: The close() method is used to shut down the context[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. * State Change: After close() is called, isActive() returns false[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md]. * Resource Release: Attempting to retrieve beans or interact with the context after closing typically results in exceptions, indicating the context is no longer functional[600-developer-java-spring-multipleapplicationcontext.md][600-developer-java-spring-multipleapplicationcontext.md].

Sources

^[600-developer-java-spring-multipleapplicationcontext.md]