# 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:

1. Construction: Context created with internal pod factory
2. Registration: Pod definitions and singletons registered
3. Refresh: Context initialized and pods instantiated
4. Operation: Pods available for dependency injection
5. 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

## Constructors

GenericApplicationContext.new()
  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 setter inherited
logger → Log
  The logger associated with this application context.
  final inherited
podFactory ↔ ConfigurableListablePodFactory?
  The pod factory associated with this application context.
  getter/setter pair inherited
runtimeType → Type
  A representation of the runtime type of the object.
  no setter inherited

## Methods

addApplicationListener(ApplicationEventListener<ApplicationEvent> listener) → Future<void>
  Adds an ApplicationEventListener to be notified of all ApplicationEvents.
  inherited
addPodProcessor(PodProcessor 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 given `name`.
  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 given `name`.
  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
getPodProcessorCount() → int
  Gets the number of registered pod-aware processors.
  inherited
getPodProcessors() → List<PodProcessor>
  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` if `name` 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 given `name`.
  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<T>>? customizer, String? name}) → Future<void>
  Registers a pod of type `T` in the registry.
  override
registerPodProcessors() → 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 given `name`.
  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