Create EnvironmentType enum: public enum EnvironmentType { VAPP, PHYSICAL, CLOUD } then create qualifier: @Qualifier @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE}) public @interface EnvironmentQualifier { EnvironmentType value(); } ... next create abstract class or interface Environment: public interface Environment { Machine getMachine(String name); } then create EnvironmentLiteral to be able to select environment with »
JEE
Model Mapper - very nice lib: http://modelmapper.org/getting-started/ »