import org.kametic.specifications.Specification; //导入依赖的package包/类
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public InitState initialize(InitContext initContext) {
Map>> classesBySpec = initContext.scannedTypesBySpecification();
streamClasses(classesBySpec.get(BusinessSpecifications.DATA_IMPORTER), DataImporter.class)
.filter(importerClass -> !DefaultDataImporter.class.isAssignableFrom(importerClass))
.forEach(importerClasses::add);
LOGGER.debug("Data importers => {}", importerClasses);
streamClasses(classesBySpec.get(BusinessSpecifications.DATA_EXPORTER), DataExporter.class)
.filter(exporterClass -> !DefaultDataExporter.class.isAssignableFrom(exporterClass))
.forEach(exporterClasses::add);
LOGGER.debug("Data exporters => {}", exporterClasses);
streamClasses(classesBySpec.get(BusinessSpecifications.DATA_SET), Object.class).forEach(
dataClasses::add);
LOGGER.debug("DTO classes with default importer/exporter => {}", dataClasses);
// Add bindings for explicit data importers/exporters
bindings.putAll(associateInterfaceToImplementations(DataImporter.class, importerClasses, false));
overridingBindings.putAll(associateInterfaceToImplementations(DataImporter.class, importerClasses, true));
bindings.putAll(associateInterfaceToImplementations(DataExporter.class, exporterClasses, false));
overridingBindings.putAll(associateInterfaceToImplementations(DataExporter.class, exporterClasses, true));
Set> classesWithExplicitImporter = importerClasses.stream()
.map(importerClass -> (Class>) BusinessUtils.resolveGenerics(DataImporter.class, importerClass)[0])
.collect(toSet());
Set> classesWithExplicitExporter = exporterClasses.stream()
.map(exporterClass -> (Class>) BusinessUtils.resolveGenerics(DataExporter.class, exporterClass)[0])
.collect(toSet());
// Then add bindings for default data importers/exporters
bindingStrategies.addAll(new DefaultDataCollector(classesWithExplicitImporter, classesWithExplicitExporter)
.collect(dataClasses));
buildImporterDefs(classesWithExplicitImporter);
buildExporterDefs(classesWithExplicitExporter);
return InitState.INITIALIZED;
}