У меня есть контроллер REST
@Path("/greet")
@RequestScoped
public class GreetController {
@Inject
private GreeterService greeterService;
@GET
@Path("{name}")
@Produces(TEXT_PLAIN)
public String greet(@PathParam("name") String name) {
return greeterService.greet(name);
}
}
, который использует GreeterService
@RequestScoped
public class GreeterService {
@Inject
private Greeter greeter;
public String greet(String name) {
return greeter.greet(name);
}
}
Сам GreeterService внедряет интерфейс, который имеет две реализации
@RequestScoped
@Hello
public class HelloGreeter implements Greeter {
@Override
public String greet(String name) {
return "Hello " + name;
}
}
и
@RequestScoped
@Whazzup
public class WhazzupGreeter implements Greeter {
@Override
public String greet(String name) {
return "Whazzup " + name;
}
}
@Whazzup
и @Hello
являются просто квалификаторами.
Я пытаюсь внедрить правильную реализацию Greeter
-интерфейса в GreeterService
на основеКлассификатор, используемый в GreetController.Возможно ли это даже с помощью CDI?Простой обходной путь, конечно, может состоять в том, чтобы иметь два GreeterService
с для каждого классификатора, но это кажется плохой идеей, так как число GreeterService
с увеличивается при добавлении новых классификаторов.
Конечно, этопросто базовый пример, а GreeterServcie не нужен, но мне не разрешено публиковать код моей компании в StackOverflow, поэтому мне пришлось реализовать простой пример, который воспроизводит нашу архитектуру.
Заранее спасибо!