Экземпляр компонента с более короткой областью действия, внедренный в экземпляр компонента с большей областью действия в CDI - как это работает? - PullRequest
16 голосов
/ 05 июля 2011

Рассмотрим следующий bean-объект CDI в области запроса:

@RequestScoped
public class RequestScopedBean {
    // ...
}

Теперь я внедряю его в bean-компонент в области приложения:

@ApplicationScoped
public class ApplicationScopedBean {
    @Inject private RequestScopedBean requestScopedBean;
    // ...
}

Я запустил этот код и заметил, чтоЭкземпляр bean-объекта в области запроса отличается между двумя запросами, но экземпляр bean-объекта в области приложения одинаков.Я сомневаюсь: как это работает?Привязывается ли экземпляр компонента в области запроса к полю области приложения при каждом запросе?Или прокси-компонент в области приложения просто изменяется между запросами?

1 Ответ

13 голосов
/ 05 июля 2011

В CDI каждый внедренный объект на самом деле является прокси.Таким образом, в этом случае прокси, вероятно, содержит ссылку на RequestContext, и при каждом вызове метода получает правильный экземпляр компонента.

...