Как создать "Custom Injection Provider" (фабрика) без трикотажа

Есть ли способ достичь того же результата, описанного здесь, не в зависимости от трикотажа, а в чистом виде? Я хотел бы создать пользовательский поставщик инъекций, например, Джерси, чтобы я мог внедрить MyClass, извлекая пользовательские данные из HttpServletRequest

@Inject
protected MyClass myClass;

Я также нашел это обсуждение полезным, оно работает так же с java.util.function.Supplier но Джерси все еще нужен в этом коде:

bindFactory(MyFactoryOrSupplier.class)
.to(MyClass.class)
.in(RequestScoped.class);

РЕДАКТИРОВАТЬ:

CDI также является хорошей альтернативой, но предпочтительнее чистый jax-rs

1 ответ

Решение

Я узнаю это решение с помощью CDI:

@ApplicationScoped
public class MyFactoryOrSupplier {

    @Produces
    @RequestScoped
    public IMyClass getMyClass(@Context HttpServletRequest request) {
        return (IMyClass) request.getAttribute("MyInjectedClass");
    }
}

а потом в моих сервлетах

@Inject
protected IMyClass myClass;

beans.xml

bean-discovery-mode="annotated"

На самом деле MyClass implements IMyClass потому что я не знаю, что MyClass иметь публичный конструктор без аргументов, и это сделало свое дело.

Другие вопросы по тегам