Если вы хотите придерживаться текущего дизайна, вы можете сделать что-то вроде этого:
public class MyGeneralPurposeSupportHandler implements PlatformSupportHandler {
private final Set<String> supportedPlatforms;
public MyGeneralPurposeSupportHandler(Set<String> supportedPlatforms) {
this.supportedPlatforms = supportedPlatforms;
}
public boolean isPlatformSupported(String platform) {
return supportedPlatforms.contains(platform);
}
}
// now in configuration:
@Configuration
class MySpringConfig {
@Bean
@Qualifier("discountPlatformSupportHandler")
public PlatformSupportHandler discountPlatformSupportHandler() {
return new MyGeneralPurposeSupportHandler(new HashSefOf({"Android", "iPhone"})); // yeah its not a java syntax, but you get the idea
}
@Bean
@Qualifier("bsafePlatformSupportHandler")
public PlatformSupportHandler bsafePlatformSupportHandler() {
return new MyGeneralPurposeSupportHandler(new HashSefOf({"Android", "iPhone", "iPad"}));
}
}
Этот метод имеет преимущество в том, что не создает класс для типа (discount, bsafe, et c) , так что это отвечает на вопрос.
Идем дальше, что произойдет, если не будет запрошен тип, в настоящее время он потерпит неудачу, потому что бин не существует в контексте приложения - не очень хороший подход.
Таким образом, вы можете создать карту типа для набора поддерживаемых платформ, сохранить карту в конфигурации или что-то еще, чтобы пружина сделала свое волшебство c. В итоге вы получите что-то вроде этого:
public class SupportHandler {
private final Map<String, Set<String>> platformTypeToSuportedPlatforms;
public SupportHandler(Map<String, Set<String>> map) {
this.platformTypeToSupportedPlatforms = map;
}
public boolean isPaltformSupported(String type) {
Set<String> supportedPlatforms = platformTypeToSupportedPlatforms.get(type);
if(supportedPlatforms == null) {
return false; // or maybe throw an exception, the point is that you don't deal with spring here which is good since spring shouldn't interfere with your business code
}
return supportedPlatforms.contains(type);
}
}
@Configuration
public class MyConfiguration {
// Configuration conf is supposed to be your own way to read configurations in the project - so you'll have to implement it somehow
@Bean
public SupportHandler supportHandler(Configuration conf) {
return new SupportHandler(conf.getRequiredMap());
}
}
Теперь, если вы будете следовать этому подходу, добавление новых поддерживаемых типов вообще станет без кода, вы только добавите конфигурацию, безусловно, лучший из возможных, какой я могу предлагает.
Однако в обоих методах отсутствуют функции java 8;)