У меня есть сервис, который реализует интерфейс. Теперь я хочу написать картограф, который в основном говорит, что когда я передаю этот тип enum, использую этот сервис. Это то, что у меня есть
@Service
MyService implements Service {}
@Component
@RequiredArgsConstructor
MyMapper implements Mapper<Enum, Service> {
private final MyService myService;
private ImmutableMap<Enum, Service> MAPPER = ImmutableMap.<MyEnum, MyService>builder()
.put(Enum.A, myService)
.build();;
@Override
public Service map(Enum input) {
return MAPPER.get(input);
}
}
Однако, похоже, это не работает. Я думаю, что мне не разрешено использовать переменную экземпляра (autowired) для создания экземпляра другой переменной экземпляра.
Чтобы решить эту проблему, я теперь использовал шаблон синглтона.
@Service
MyService implements Service {}
@Component
@RequiredArgsConstructor
MyMapper implements Mapper<Enum, Service> {
private final MyService myService;
private ImmutableMap<Enum, Service> MAPPER = null;
@Override
public Service map(Enum input) {
if(MAPPER == null){
MAPPER = createMapper();
}
return MAPPER.get(input);
}
private ImmutableMap<Enum, Service> createMapper(){
return ImmutableMap.<MyEnum, MyService>builder()
.put(Enum.A, myService)
.build();;
}
}
Кажется, это работает, но мне было интересно, есть ли другие варианты решения этой проблемы.