1package dev.rafex.ether.di;
29import java.util.Objects;
30import java.util.function.Consumer;
31import java.util.function.Supplier;
62public final class Bootstrap {
77 Objects.requireNonNull(container,
"container");
78 Objects.requireNonNull(closer,
"closer");
112 final Consumer<C> warmup,
113 final Consumer<C> onShutdown) {
114 Objects.requireNonNull(containerFactory,
"containerFactory");
116 final var closer =
new Closer();
117 final C container = Objects.requireNonNull(containerFactory.get(),
"containerFactory returned null");
119 if (container instanceof AutoCloseable ac) {
123 if (warmup !=
null) {
124 warmup.accept(container);
127 final var runtime =
new Runtime<>(container, closer);
129 java.lang.Runtime.getRuntime().addShutdownHook(
new Thread(() -> {
130 if (onShutdown !=
null) {
132 onShutdown.accept(container);
133 }
catch (
final Exception e) {
138 },
"ether-di-shutdown"));
153 final Consumer<C> warmup) {
154 return start(containerFactory, warmup,
null);
166 return start(containerFactory,
null,
null);
static< C > Runtime< C > start(final Supplier< C > containerFactory, final Consumer< C > warmup, final Consumer< C > onShutdown)
Creates and starts the application.
static< C > Runtime< C > start(final Supplier< C > containerFactory)
Convenience overload — starts without warmup or pre-shutdown callback.
static< C > Runtime< C > start(final Supplier< C > containerFactory, final Consumer< C > warmup)
Convenience overload — starts without a pre-shutdown callback.
record Runtime< C >(C container, Closer closer) implements AutoCloseable
Immutable holder for the running application state.
Composite AutoCloseable that closes registered resources in LIFO order.