2016-02-11 2 views
1

Я пытаюсь определить производителя CDI для инъекции того или иного экземпляра объекта.CDI @ Новые объекты @Singleton. Что оно делает?

Вот код производителя:

@Produces 
public static MyRepository getMyRepository(@New MyCacheRepository cache, 
                   @New MyNormalRepository db) { 

    if(conditions) { 
     return cache; 
    } 

    return db; 

} 

MyCacheRepository объявлен @javax.inject.Singleton. Является ли одноэлементным условием, соблюдаемым CDI в этом случае, или создаст экземпляр @NewMyCacheRepository всякий раз, когда это требуется?

ответ

2

Также в соответствии с документацией «Бобы с областью видимости @Singleton не имеют прокси-объекта. Клиенты имеют прямую ссылку на экземпляр singleton». Зная это, вы сможете найти ответ для себя, проверив идентификатор введенного объекта и сравните его с тем, где вы не используете @New.

Вы также можете добавить метод @PostConstruct к вашему @Singleton и посмотреть, вызвано ли оно дважды.

Как указано в документации, предупреждает, что @New устарела: «Спецификатор @New был устаревшим в CDI 1.1. Приложениям CDI рекомендуется вводить вместо них @Dependent.

Смотрите также: