Create a new Guice Module class

Create a new Guice Module called UserBOMModule that extends from com.google.inject.AbstractModule and provide an implementation of the configure() method as follows,

protected void configure() {

	final Multibinder<ReadAndUpsertBOM> readAndUpsertBOMBinder
		= Multibinder.newSetBinder(binder(),
			ReadAndUpsertBOM.class);
	readAndUpsertBOMBinder.addBinding().to(UserBOM.class);

	final Multibinder<InformationalBOM> informationalBOMBinder
		= Multibinder.newSetBinder(binder(),
			InformationalBOM.class);
	informationalBOMBinder.addBinding().to(UserBOM.class);

	final Multibinder<SecurityBOM> securityBOMBinder
		= Multibinder.newSetBinder(binder(),
			SecurityBOM.class);
	securityBOMBinder.addBinding().to(UserBOM.class);

	final Multibinder<DeleteBOM> deleteBOMBinder
		= Multibinder.newSetBinder(binder(),
			DeleteBOM.class);
	deleteBOMBinder.addBinding().to(UserBOM.class);

	final Multibinder<DependentBOM> dependentBOMBinder
		= Multibinder.newSetBinder(binder(),
			DependentBOM.class);
	dependentBOMBinder.addBinding().to(UserBOM.class);

	final Multibinder<ExistenceBOM> existenceBOMBinder
		= Multibinder.newSetBinder(binder(),
			ExistenceBOM.class);
	existenceBOMBinder.addBinding().to(UserBOM.class);

}

Note that in the above code snippet, a new com.google.inject.multibindings.Multibinder instance is created in order to hold multiple implementations of the curam.util.ctm.bom.ReadAndUpsertBOM interface. An object of type UserBOM is bound to this binder using the standard addBinding() method. The process is repeated with binders for all of the other BOM types - i.e. for curam.util.ctm.bom.InformationalBOM, curam.util.ctm.bom.SecurityBOM, curam.util.ctm.bom.DeleteBOM, curam.util.ctm.bom.DependentBOM and curam.util.ctm.bom.ExistenceBOM interfaces. Note that as a single implementation is used for all of the BOM types, the same class is bound to each of the binders (i.e. UserBOM).