Вы можете заставить их всех реализовывать общий интерфейс:
interface YourCommonServiceName {
YourReturnObject yourMethodName(/* your arguments */);
}
Тогда изначально вы можете добавить все сервисы на карту в зависимости от их состояния:
private final Map<Integer, YourCommonServiceName> services;
@Autowired
public YourClass(YourCommonServiceName serviceA, YourCommonServiceName serviceB, /* ... */) {
Map<Integer, YourCommonServiceName> map = new HashMap<>();
map.put(1, serviceA);
map.put(2, serviceB);
// ...
services = Collections.unmodifiableMap(map);
}
Затем выможно просто вызвать services
-карту с условием в качестве аргумента:
YourCommonServiceName service = services.get(condition);
if(service == null) {
// do something if nothing matches
return;
}
и затем вызвать метод с аргументами:
YourReturnObject o = service.yourMethodName(args...);
Вы можете создать эту карту также непосредственно в@Configuration
класс:
@Bean
public Map<Integer, YourCommonServiceName> services(YourCommonServiceName serviceA, YourCommonServiceName serviceB, ...) {
Map<Integer, YourCommonServiceName> map = new HashMap<>();
map.put(1, serviceA);
map.put(2, serviceB);
// ...
return Collections.unmodifiableMap(map);
}
А затем введите Map
в ваш другой класс:
public YourClass(Map<Integer, YourCommonServiceName> services) {
this.services = services;
}