Java EE CDI - получение нового экземпляра класса при каждом вызове метода - PullRequest
0 голосов
/ 25 января 2019

Я хочу провести некоторый рефакторинг Java-приложения J2EE, но мне не ясно, как заставить CDI обеспечивать необходимые зависимости:

Текущая настройка довольно проста / легка для понимания:

@ApplicationScoped
public class MyApplication  {


    @Inject
    @Named("Default")
    private Dependency dependency;

    public void dostuff(){
        dependency.process();
    }

}

Теперь мне нужен новый экземпляр dependency каждый раз, когда я звоню dostuff.

Мне неясно, как использовать CDI для создания этого для меня. У моей зависимости есть свои зависимости, которые я хотел бы создать для меня CDI.

Я ожидаю, что есть слой косвенности, который мне нужно добавить.

Дополнительный контекст: Этот класс является частью процесса, который опрашивает работу, которая должна быть выполнена, и размещается в Wildfly. Мы не используем Spring в проекте.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Поскольку вы хотите иметь новый экземпляр Dependency, каждый раз, когда вызывается метод, я думаю, что вам нужен экземпляр Provider, который (javax.inject.Provider<T>) вводится в ваш класс / bean.

Вставьте провайдера в ваш текущий класс:

@Inject Provider<DesiredBean> provider;

Затем в вашем методе doStuff() получите новый экземпляр:

DesiredBean desiredBean = provider.get();

Это должно получитьты идешь.

0 голосов
/ 25 января 2019

Есть ли какая-то конкретная причина, по которой вам нужно использовать CDI, кроме внедрения зависимостей?

Если нет, я бы предложил, чтобы doStuff () принял объект Dependency в качестве параметра:

public void doStuff(Dependency dependency) {
  dependency.process();
}

Затем, когда вы вызываете метод, вы предоставляете ему новый экземпляр зависимости:

myApplication.doStuff(new Dependency());

Таким образом, вы по-прежнему сохраняете свой класс менее связанным, чем объявление нового экземпляра в конструкторе или поле.

...