GenericApplicationContext class abstract
Generic ApplicationContext implementation that holds a single internal
DefaultListablePodFactory
instance and does not assume a specific pod
definition format.
This class implements the ConfigurableApplicationContext interface to allow for convenient registration of pod definitions and classes as well as programmatic registration of singletons. It serves as a flexible base for various application context implementations in the JetLeaf framework.
Key Features:
- Programmatic Registration: Register pods and singletons via code
- Flexible Configuration: No assumptions about pod definition formats
- Lifecycle Management: Full context lifecycle support
- Parent Context Support: Hierarchical context relationships
- Post-Processing: Extensible processor architecture
Context Lifecycle:
- Construction: Context created with internal pod factory
- Registration: Pod definitions and singletons registered
- Refresh: Context initialized and pods instantiated
- Operation: Pods available for dependency injection
- Destruction: Context closed and resources cleaned up
Important Note:
The refresh method must be called exactly once after all pod definitions are registered and before any pod access attempts.
Usage Example:
void main() async {
// Create context
final context = GenericApplicationContext();
// Register pod definitions programmatically
final podDef = RootPodDefinition(type: Class<UserService>());
context.registerDefinition('userService', podDef);
// Register singleton instances
context.getPodFactory().registerSingleton(
'configService',
ConfigService()
);
// Refresh to initialize the context
await context.refresh();
// Use the context
final userService = context.getPod<UserService>('userService');
await userService.processUsers();
// Close context when done
await context.close();
}
Advanced Configuration:
// With custom pod factory
final customFactory = DefaultListablePodFactory();
customFactory.setAllowCircularReferences(true);
final context = GenericApplicationContext.withPodFactory(customFactory);
// With parent context for hierarchical lookup
final parentContext = GenericApplicationContext();
final childContext = GenericApplicationContext.withParent(parentContext);
Framework Integration:
This context does not support special pod definition formats by default. For contexts that read pod definitions from annotations, configuration files, or other external sources, consider using specialized subclasses like AnnotationConfigApplicationContext.
See also:
- AbstractApplicationContext for the base implementation
- ConfigurableApplicationContext for the configuration interface
DefaultListablePodFactory
for the internal pod factory- AnnotationConfigApplicationContext for annotation-based configuration
- Inheritance
-
- Object
- SmartLifecycle
- ConfigurableApplicationContext
- AbstractApplicationContext
- GenericApplicationContext
- Implementers
Constructors
- GenericApplicationContext()
-
Generic ApplicationContext implementation that holds a single internal
DefaultListablePodFactory
instance and does not assume a specific pod definition format. - GenericApplicationContext.all(ApplicationContext? parent, DefaultListablePodFactory? podFactory)
- Creates a new GenericApplicationContext with specified parent and pod factory.
- GenericApplicationContext.withParent(ApplicationContext parent, [DefaultListablePodFactory? podFactory])
- Creates a new GenericApplicationContext with the given parent context.
- GenericApplicationContext.withPodFactory(DefaultListablePodFactory podFactory, [ApplicationContext? parent])
- Creates a new GenericApplicationContext with the given pod factory.
Properties
- hashCode → int
-
The hash code for this object.
no setterinherited
- logger → Log
-
The logger associated with this application context.
finalinherited
- podFactory ↔ ConfigurableListablePodFactory?
-
The pod factory associated with this application context.
getter/setter pairinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
addApplicationListener(
ApplicationEventListener< ApplicationEvent> listener) → Future<void> -
Adds an ApplicationEventListener to be notified of all ApplicationEvents.
inherited
-
addPodAwareProcessor(
PodAwareProcessor processor) → void -
Registers a new pod-aware processor.
inherited
-
addPodFactoryPostProcessor(
PodFactoryPostProcessor processor) → void -
Adds a PodFactoryPostProcessor to be applied to the pod factory.
inherited
-
addSingletonCallback(
String name, Class type, Consumer< Object> callback) → void -
Add a callback to be executed when the singleton associated with
name
is initialized.inherited -
cancelRefresh(
PodException exception) → Future< void> -
Cancels the refresh process due to the provided
PodException
.inherited -
clearMetadataCache(
) → void -
Clears the internal metadata cache.
inherited
-
clearSingletonCache(
) → void -
Clears all cached singleton pods.
inherited
-
close(
) → Future< void> -
Closes this resource, relinquishing any underlying resources.
inherited
-
completeRefresh(
) → Future< void> -
Completes the refresh process for the given
ConfigurableListablePodFactory
.inherited -
containsDefinition(
String name) → bool -
Returns
true
if this registry contains a pod with the givenname
.inherited -
containsLocalPod(
String podName) → Future< bool> -
Checks if a pod with the given name is registered locally in this factory.
inherited
-
containsPod(
String podName) → Future< bool> -
Checks if a pod with the given name is registered in the factory.
inherited
-
containsSingleton(
String name) → bool -
Returns
true
if this registry contains a pod with the givenname
.inherited -
containsType(
Class type, [bool allowPodProviderInit = false]) → Future< bool> -
Checks if the factory contains a pod of the specified type.
inherited
-
copyConfigurationFrom(
ConfigurablePodFactory otherFactory) → void -
Copies configuration from another factory.
inherited
-
destroyPod(
String podName, Object podInstance) → Future< void> -
Destroys a pod instance by name and instance.
inherited
-
destroyPods(
) → Future< void> -
Destroys all managed pods in the given
ConfigurableListablePodFactory
.override -
destroyScopedPod(
String podName) → void -
Destroys all pods in the specified scope.
inherited
-
destroySingletons(
) → void -
Destroys all singleton pods in the factory.
inherited
-
doClose(
) → Future< void> -
Template method for actual cleanup logic when the context is closed.
inherited
-
doGetFreshPodFactory(
) → Future< ConfigurableListablePodFactory> -
Returns a fresh
ConfigurableListablePodFactory
for this context.override -
doStart(
) → Future< void> -
Template method invoked during start to perform startup logic.
inherited
-
doStop(
) → Future< void> -
Template method invoked during stop to perform shutdown logic.
inherited
-
findAllAnnotationsOnPod<
A> (String podName, Class< A> type) → Future<Set< A> > -
Finds all annotations of the specified type on a pod.
inherited
-
findAnnotationOnPod<
A> (String podName, Class< A> type) → Future<A?> -
Finds a specific annotation on a pod.
inherited
-
finishPodFactoryInitialization(
) → Future< void> -
Finalizes the initialization of the
ConfigurableListablePodFactory
.inherited -
finishRefresh(
) → Future< void> -
Template method invoked during refresh to complete the refresh process.
inherited
-
get<
T> (Class< T> type, [List<ArgumentValue> ? args]) → Future<T> -
Retrieves a pod instance by its type with optional arguments.
inherited
-
getAliases(
String podName) → List< String> -
Retrieves all alias names for the specified pod.
inherited
-
getAllowCircularReferences(
) → bool -
Retrieves the current circular reference setting.
inherited
-
getAllowDefinitionOverriding(
) → bool -
Retrieves the current definition overriding setting.
inherited
-
getAllowRawInjectionEvenWhenWrapped(
) → bool -
Retrieves the current raw injection despite wrapping setting.
inherited
-
getApplicationEventBus(
) → ApplicationEventBus -
Returns the ApplicationEventBus currently associated with
this application context.
inherited
-
getApplicationName(
) → String -
Returns the name of this application.
inherited
-
getApplicationStartup(
) → ApplicationStartup -
Defines a contract for components that are aware of and can interact with
an
ApplicationStartup
strategy.inherited -
getConversionService(
) → ConversionService -
Retrieves the currently assigned
ConversionService
.inherited -
getDefinition(
String name) → PodDefinition -
Retrieve the pod registered under
name
.inherited -
getDefinitionNames(
) → List< String> -
Returns a list of all pod names currently registered.
inherited
-
getDisplayName(
) → String -
Returns the display name of this application context.
inherited
-
getEnvironment(
) → Environment -
🫘 Returns the
Environment
associated with the current context.inherited -
getId(
) → String -
Returns a unique identifier for this application context.
inherited
-
getIsRefreshed(
) → bool -
Returns true if the application context has been refreshed.
inherited
-
getMainApplicationClass(
) → Class< Object> -
Returns the main application class.
inherited
-
getMergedPodDefinition(
String podName) → RootPodDefinition -
Retrieves the merged pod definition for the specified pod name.
inherited
-
getMessage(
String code, {List< Object> ? args, Locale? locale, String? defaultMessage}) → String -
Retrieve a message for the given code.
inherited
-
getMessageSource(
) → MessageSource -
Returns the configured MessageSource.
inherited
-
getNamedObject(
String podName, [List< ArgumentValue> ? args]) → Future<Object> -
Retrieves a pod as a generic Object by its name with optional arguments.
inherited
-
getNumberOfPodDefinitions(
) → int -
Returns the total number of pods registered.
inherited
-
getObject(
Class< Object> type, [List<ArgumentValue> ? args]) → Future<Object> -
Retrieves a pod as a generic Object by its type with optional arguments.
inherited
-
getPackageName(
) → String -
Represents an abstraction for identifying the package that an object,
resource, or service belongs to.
inherited
-
getParent(
) → ApplicationContext? -
Returns the parent context, if any.
inherited
-
getParentFactory(
) → PodFactory? -
Retrieves the parent factory in the hierarchy, if any.
inherited
-
getPhase(
) → int -
Interface for objects that may participate in a phased process
such as lifecycle management.
inherited
-
getPod<
T> (String podName, [List< ArgumentValue> ? args, Class<T> ? type]) → Future<T> -
Retrieves a pod instance by its name with optional arguments.
inherited
-
getPodAwareProcessorCount(
) → int -
Gets the number of registered pod-aware processors.
inherited
-
getPodAwareProcessors(
) → List< PodAwareProcessor> -
Retrieves all registered pod-aware processors.
inherited
-
getPodClass(
String podName) → Future< Class> -
Retrieves the Class object for the specified pod name.
inherited
-
getPodExpressionResolver(
) → PodExpressionResolver? -
Retrieves the current expression resolver.
inherited
-
getPodFactory(
) → ConfigurableListablePodFactory -
🫘 Returns the underlying
ConfigurableListablePodFactory
.override -
getPodFactoryPostProcessors(
) → List< PodFactoryPostProcessor> -
The list of PodFactoryPostProcessors to be applied to the pod factory.
inherited
-
getPodNames(
Class type, {bool includeNonSingletons = false, bool allowEagerInit = false}) → Future< List< String> > -
Retrieves all pod names for pods of the specified type.
inherited
-
getPodNamesForAnnotation<
A> (Class< A> type) → Future<List< String> > -
Retrieves pod names for pods annotated with the specified annotation type.
inherited
-
getPodNamesIterator(
) → Iterator< String> -
Returns an iterator over all pod names in the factory.
inherited
-
getPodsOf<
T> (Class< T> type, {bool includeNonSingletons = false, bool allowEagerInit = false}) → Future<Map< String, T> > -
Retrieves all pods of the specified type as a map of name to instance.
inherited
-
getPodsWithAnnotation<
A> (Class< A> type) → Future<Map< String, Object> > -
Retrieves pods with the specified annotation as a map of name to instance.
inherited
-
getProvider<
T> (Class< T> type, {String? podName, bool allowEagerInit = false}) → Future<ObjectProvider< T> > -
Retrieves a provider for a pod, allowing for lazy or eager initialization.
inherited
-
getRegisteredScope(
String scopeName) → PodScope? -
Retrieves a registered scope by name.
inherited
-
getRegisteredScopeNames(
) → List< String> -
Retrieves all registered scope names.
inherited
-
getSingleton(
String name, {bool allowEarlyReference = true, ObjectFactory< Object> ? factory}) → Future<Object?> -
Retrieve the pod registered under
name
.inherited -
getSingletonCount(
) → int -
Returns the total number of pods registered.
inherited
-
getSingletonNames(
) → List< String> -
Returns a list of all pod names currently registered.
inherited
-
getStartTime(
) → DateTime -
Returns the startup time of this context as a DateTime.
inherited
-
initApplicationEventBus(
) → Future< void> -
Initializes the ApplicationEventBus for this context.
inherited
-
initLifecycleProcessor(
) → Future< void> -
Initializes the
LifecycleProcessor
for this context.inherited -
initMessageSource(
) → Future< void> -
Initializes the MessageSource for this context.
inherited
-
invokePodFactoryPostProcessors(
) → Future< void> -
Invokes all registered pod factory post-processors on the given
ConfigurableListablePodFactory
.override -
isActive(
) → bool -
Returns whether this application context is currently active.
inherited
-
isActuallyInCreation(
String podName) → bool -
Checks if a pod with the given name is currently being created.
inherited
-
isAutoStartup(
) → bool -
An extension of the Lifecycle interface for those objects that require
to be started upon ApplicationContext refresh and/or shutdown in a
particular order.
inherited
-
isAutowireCandidate(
String podName, DependencyDescriptor descriptor) → bool -
Checks if a pod is a candidate for autowiring for the given dependency.
inherited
-
isCachePodMetadata(
) → bool -
Checks if pod metadata caching is enabled.
inherited
-
isClosed(
) → bool -
Returns whether this application context has been closed.
inherited
-
isNameInUse(
String name) → Future< bool> -
Returns
true
ifname
is currently in use in this registry.inherited -
isPodProvider(
String podName, [RootPodDefinition? rpd]) → Future< bool> -
Checks if the specified pod name refers to a pod provider.
inherited
-
isPrototype(
String podName) → Future< bool> -
Checks if the specified pod is configured as a prototype.
inherited
-
isRunning(
) → bool -
Check whether this component is currently running.
inherited
-
isSingleton(
String podName) → Future< bool> -
Checks if the specified pod is configured as a singleton.
inherited
-
isTypeMatch(
String name, Class typeToMatch, [bool allowPodProviderInit = false]) → Future< bool> -
Checks if the pod with the specified name matches the given type.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
postProcessPodFactory(
) → Future< void> -
Post-processes the
ConfigurableListablePodFactory
for this context.override -
preInstantiateSingletons(
) → Future< void> -
Pre-instantiates all singleton pods.
inherited
-
preparePodFactory(
) → Future< void> -
Prepares the
ConfigurableListablePodFactory
for this context.inherited -
prepareRefresh(
) → Future< void> -
Prepares the application context for a refresh.
inherited
-
publishEvent(
ApplicationEvent event) → Future< void> -
Publishes the given
event
to all registered ApplicationEventListeners.inherited -
refresh(
) → Future< void> -
Refreshes this application context:
inherited
-
register(
PodRegistrar registrar) → void -
Registers a
registrar
that declares pods into this registry.override -
registerAlias(
String name, String alias) → void -
Registers an alias for an existing name in the registry.
inherited
-
registerDefinition(
String name, PodDefinition pod) → Future< void> -
Register a new
pod
under the givenname
.inherited -
registerIgnoredDependency(
Class type) → void -
Registers a dependency type that should be ignored during autowiring.
inherited
-
registerListeners(
) → Future< void> -
Registers all ApplicationEventListener pods in the
ConfigurableListablePodFactory
.inherited -
registerPod<
T> (Class< T> podClass, {Consumer<Spec< ? customizer, String? name}) → Future<T> >void> -
Registers a pod of type
T
in the registry.override -
registerPodAwareProcessors(
) → Future< void> -
Registers all PodAware processors into the given
ConfigurableListablePodFactory
.override -
registerResolvableDependency(
Class type, [Object? autowiredValue]) → void -
Registers a resolvable dependency for autowiring.
inherited
-
registerScope(
String scopeName, PodScope scope) → void -
Registers a new scope with the given name.
inherited
-
registerSingleton(
String name, Class type, {ObjectHolder< Object> ? object, ObjectFactory<Object> ? factory}) → Future<void> -
Register a new
pod
under the givenname
.inherited -
removeDefinition(
String name) → Future< void> -
Remove the pod associated with
name
.inherited -
removeSingleton(
String name) → void -
Remove the pod associated with
name
.inherited -
resetCommonCaches(
) → Future< void> -
Resets common internal caches maintained by the container.
override
-
resolveDependency(
DependencyDescriptor descriptor, [Set< String> ? candidates]) → Future<Object?> -
Resolves a dependency based on the provided descriptor.
inherited
-
setAllowCircularReferences(
bool value) → void -
Allows or disallows circular references between pods.
inherited
-
setAllowDefinitionOverriding(
bool value) → void -
Allows or disallows overriding of pod definitions.
inherited
-
setAllowRawInjectionEvenWhenWrapped(
bool value) → void -
Allows or disallows raw injection despite wrapping.
inherited
-
setApplicationEventBus(
ApplicationEventBus applicationEventBus) → void -
Sets the ApplicationEventBus for this application context.
inherited
-
setApplicationStartup(
ApplicationStartup applicationStartup) → void -
Defines a contract for components that are aware of and can interact with
an
ApplicationStartup
strategy.inherited -
setCachePodMetadata(
bool cachePodMetadata) → void -
Enables or disables caching of pod metadata for performance optimization.
inherited
-
setConversionService(
ConversionService conversionService) → void -
Sets an assigned
ConversionService
.inherited -
setEnvironment(
Environment environment) → void -
Sets the
Environment
that this component runs in.inherited -
setMainApplicationClass(
Class< Object> mainApplicationClass) → void -
Sets the main application class.
inherited
-
setMessageSource(
MessageSource messageSource) → void -
Sets the MessageSource used for resolving internationalized messages.
inherited
-
setParent(
ApplicationContext parent) → void -
Sets the parent of this application context.
inherited
-
setParentFactory(
PodFactory? parentFactory) → void -
Sets the parent factory for this hierarchical factory.
inherited
-
setPodExpressionResolver(
PodExpressionResolver? valueResolver) → void -
Sets the expression resolver for resolving expressions in pod definitions.
inherited
-
start(
) → FutureOr< void> -
A common interface defining methods for start/stop lifecycle control.
inherited
-
stop(
[Runnable? callback]) → FutureOr< void> -
Stop this component, typically in a synchronous fashion.
inherited
-
supports(
ApplicationType applicationType) → bool -
Returns whether this context supports the given
applicationType
.inherited -
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited