Я просто наткнулся на фрагмент кода, который выполняет следующие действия:
@Autowired @Lazy Provider<SomeRepository> repository;
В типе SomeRepository
нет ничего особенного, и мне кажется, что мы могли бы достичь того же с помощью
@Autowired @Lazy SomeRepository repository;
В этом конкретном случае c как компонент репозитория, так и компонент, который их использует, являются одноэлементными. Если бы у обоих были разные области видимости, я мог бы понять использование Provider
.
Но это не так.
Поскольку оба имеют одинаковую одноэлементную область видимости, Provider
не будет получить реальный репозиторий до тех пор, пока вызывающий не вызовет свой метод get()
.
Эта задержка будет эквивалентна простому ленивому внедрению репозитория (поскольку внедряется прокси CGLIB, который на данный момент получает только фактический bean-компонент доступа.)
Я что-то упустил? Есть ли реальный случай для объединения @Lazy
провода Provider
, когда все участвующие объекты имеют одинаковую область действия?
Спасибо.