Аннотация @Produces CDI создает 4 различных объекта для каждого запроса - PullRequest
0 голосов
/ 25 марта 2020

Аннотация

@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface TestQualifier{

}

Класс с @ Producer

@RequestScoped
public class TestProducer {

  @Produces
  @TestQualifier
  public String getTestString()
  { 
    System.out.println("Initializing  test string");
    return "Test String";
  }
}

Класс, в котором должно выполняться внедрение

public class TestClass
{
    @Inject
    @TestQualifier
    private String testString;

    public void TestMethod() {
        System.out.println(testString);
    }
}

Когда я развернул этот код в JBoss EAP, Я вижу 4 раза отпечатки «Инициализация тестовой строки» для каждого запроса.

Может ли кто-нибудь сообщить, почему я вижу 4 раза «Инициализация тестовой строки» вместо 1 раза.

И есть ли какое-либо решение для инициирования экземпляра процесса только один раз для каждой области запроса, установленной в текущий 4 раза.

Спасибо

1 Ответ

0 голосов
/ 25 марта 2020

Ваш метод продюсера, который вы говорите, выглядит следующим образом:

@Produces
@TestQualifier
public String getTestString()
{ 
  System.out.println("Initializing  test string");
  return "Test String";
}

… точно так, как если бы вы написали это вместо этого:

@Produces
@Dependent // the default scope for produced objects is @Dependent
@TestQualifier
public String getTestString()
{ 
  System.out.println("Initializing  test string");
  return "Test String";
}

… где то, что вы хотите написать это:

@Produces
@RequestScoped // you want to produce a string in request scope
@TestQualifier
public String getTestString()
{ 
  System.out.println("Initializing  test string");
  return "Test String";
}

Чтобы ответить на ваш вопрос, @Dependent scope означает «создать новый объект каждый раз, когда к нему обращаются». Вы хотите «создать новый объект только при наличии нового запроса».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...