class SqlStreamSupplierComponentImpl implements SqlStreamSupplierComponent {

    private final Map<TableIdentifier<?>, SqlStreamSupplier<?>> supportMap;
    private final boolean allowStreamIteratorAndSpliterator;

    public SqlStreamSupplierComponentImpl(
        @Config(name = "allowStreamIteratorAndSpliterator", value = "false") final boolean allowStreamIteratorAndSpliterator
    ) {
        this.supportMap = new ConcurrentHashMap<>();
        this.allowStreamIteratorAndSpliterator = allowStreamIteratorAndSpliterator;
    }

    @ExecuteBefore(STARTED)
    @SuppressWarnings("unchecked")
    public void startStreamSuppliers(
        final Injector injector,
        final ProjectComponent projectComponent,
        final DbmsHandlerComponent dbmsHandlerComponent,
        final ManagerComponent managerComponent,
        final SqlStreamOptimizerComponent sqlStreamOptimizerComponent,
        final SqlStreamTerminatorComponent sqlStreamTerminatorComponent
    ) {<FILL_FUNCTION_BODY>}

    @Override
    public <ENTITY> Stream<ENTITY> stream(TableIdentifier<ENTITY> tableIdentifier, ParallelStrategy parallelStrategy) {
        final SqlStreamSupplier<ENTITY> supplier = getStreamSupplier(tableIdentifier);
        return supplier.stream(parallelStrategy);
    }

    private <ENTITY> SqlStreamSupplier<ENTITY> getStreamSupplier(TableIdentifier<ENTITY> tableIdentifier) {
        @SuppressWarnings("unchecked")
        final SqlStreamSupplier<ENTITY> streamSupplier = (SqlStreamSupplier<ENTITY>) supportMap.get(tableIdentifier);
        return requireNonNull(streamSupplier,
            "No Sql Stream Supplier installed for table identifier "
            + tableIdentifier
        );
    }
}

        // the trace component is optional
        final SqlTraceComponent sqlTraceComponent = injector.get(SqlTraceComponent.class).orElse(null);

        injector.stream(SqlAdapter.class)
            .forEach(sa -> {
                final SqlStreamSupplier<Object> supplier = new SqlStreamSupplierImpl<>(
                    (TableIdentifier<Object>) sa.identifier(),
                    (SqlFunction<ResultSet, Object>) sa.entityMapper(),
                    projectComponent,
                    dbmsHandlerComponent,
                    managerComponent,
                    sqlStreamOptimizerComponent,
                    sqlStreamTerminatorComponent,
                    sqlTraceComponent,
                    allowStreamIteratorAndSpliterator
                );
                supportMap.put(sa.identifier(), supplier);
            });
    
<no_super_class>