@ Ленивый вводить javax.inject.Provider, почему? - PullRequest
0 голосов
/ 05 августа 2020

Я просто наткнулся на фрагмент кода, который выполняет следующие действия:

@Autowired @Lazy Provider<SomeRepository> repository;

В типе SomeRepository нет ничего особенного, и мне кажется, что мы могли бы достичь того же с помощью

@Autowired @Lazy SomeRepository repository;

В этом конкретном случае c как компонент репозитория, так и компонент, который их использует, являются одноэлементными. Если бы у обоих были разные области видимости, я мог бы понять использование Provider.

Но это не так.

Поскольку оба имеют одинаковую одноэлементную область видимости, Provider не будет получить реальный репозиторий до тех пор, пока вызывающий не вызовет свой метод get().

Эта задержка будет эквивалентна простому ленивому внедрению репозитория (поскольку внедряется прокси CGLIB, который на данный момент получает только фактический bean-компонент доступа.)

Я что-то упустил? Есть ли реальный случай для объединения @Lazy провода Provider, когда все участвующие объекты имеют одинаковую область действия?

Спасибо.

...