Вставка CDI в существующий объект

Скажем, у меня есть следующий класс:

public class MyRequestPayload implements RequestPayload {

    protected MyRequestPayload() {}

    @Override
    public ResponsePayload process() {
        String result = someService.doSomething(foo, bar);
        return new MyResponsePayload(result);
    }

    public final String foo;

    public final Integer bar;

    @Inject
    private SomeService someService;
}

Могу ли я вызвать какую-нибудь службу CDI, которая будет обрабатывать все @Inject аннотации в экземпляре этого класса, внедряя все соответствующие службы, доступные в настоящее время? Это необходимо в случае, когда объекты не являются одиночными и не создаются CDI. В приведенном выше гипотетическом примере объект создается путем десериализации.


person Distortum    schedule 15.07.2014    source источник


Ответы (1)


Я не думаю, что это возможно со стандартным CDI. Но если вы используете расширение DeltaSpike, вы можете использовать BeanProvider .injectFields ... делает то, что вы хотите. Обратите внимание, что, конечно, ваш Pojo не управляется (не ограничен) CDI, разрешены только инъекции полей ...

person Jan Galinski    schedule 15.07.2014
comment
Спасибо. Я попробую и вернусь. - person Distortum; 16.07.2014
comment
@Jan: DeltaSpike использует стандартные вызовы CDI-API в этом помощнике. - person Dar Whi; 16.07.2014
comment
Ладно, круто ... так что вы можете сделать это без Deltaspike ... хотя: почему бы вам просто не использовать удобный способ ... - person Jan Galinski; 16.07.2014
comment
Я бы, конечно, склонялся к удобному пути. - person Distortum; 18.07.2014