InjectedResourceInitializationException.java
package space.sunqian.common.app.di;
import space.sunqian.annotations.Nonnull;
import space.sunqian.annotations.Nullable;
import space.sunqian.annotations.RetainedParam;
import space.sunqian.common.base.exception.FsRuntimeException;
import java.util.List;
/**
* Exception for failing to initialize resources during {@link InjectedApp} startup.
*
* @author sunqian
*/
public class InjectedResourceInitializationException extends FsRuntimeException {
private final @Nonnull InjectedResource failedResource;
private final @Nonnull List<@Nonnull InjectedResource> initializedResources;
private final @Nonnull List<@Nonnull InjectedResource> uninitializedResources;
/**
* Constructs an exception with detailed context about the resource initialize failure. This exception provides
* complete information about the resource that caused the failure, resources that were successfully initialized
* before the failure, and resources that remained uninitialized due to the failure.
* <p>
* Note the resources have already been sorted according to their dependency relationships.
*
* @param failedResource the resource that failed during initialization, causing the startup to abort
* @param cause the exception that occurred during the failed resource's initialization
* @param initializedResources the resources that were successfully initialized before the failure occurred
* @param uninitializedResources the resources that were not initialized due to the abortive termination
*/
public InjectedResourceInitializationException(
@Nonnull InjectedResource failedResource,
@Nullable Throwable cause,
@Nonnull @RetainedParam List<@Nonnull InjectedResource> initializedResources,
@Nonnull @RetainedParam List<@Nonnull InjectedResource> uninitializedResources
) {
super(cause);
this.failedResource = failedResource;
this.initializedResources = initializedResources;
this.uninitializedResources = uninitializedResources;
}
/**
* Returns the resource that failed during initialization, causing the startup to abort.
*
* @return the resource that failed during initialization, causing the startup to abort
*/
public @Nonnull InjectedResource failedResource() {
return failedResource;
}
/**
* Returns the resources that were successfully initialized before the failure occurred.
*
* @return the resources that were successfully initialized before the failure occurred
*/
public @Nonnull List<@Nonnull InjectedResource> initializedResources() {
return initializedResources;
}
/**
* Returns the resources that were not initialized due to the failure.
*
* @return the resources that were not initialized due to the failure
*/
public @Nonnull List<@Nonnull InjectedResource> uninitializedResources() {
return uninitializedResources;
}
}