ObjectProviderИногда сервису не нужно всегда инжектить другую зависимость при старте — только иногда по ходу работы. Но
@Autowired всё равно тянет её сразу, даже если она вам пока не нужна. Это бьёт по времени старта и может вызвать циклические зависимости.💡 Решение: использовать
ObjectProvider<T>.Пример:
@Service
public class NotificationService {
private final ObjectProvider<EmailSender> emailSenderProvider;
public NotificationService(ObjectProvider<EmailSender> emailSenderProvider) {
this.emailSenderProvider = emailSenderProvider;
}
public void sendEmailIfEnabled(String to, String body) {
if (featureEnabled()) {
EmailSender sender = emailSenderProvider.getIfAvailable();
if (sender != null) {
sender.send(to, body);
}
}
}
}
📌
ObjectProvider:▫️не создаёт бин сразу — ленивый доступ;
▫️ позволяет проверить наличие бина (
getIfAvailable() / ifAvailable(...));▫️можно использовать
stream() — для коллекций бинов.⚠️ Это не альтернатива DI. Это способ контролировать создание и использование бинов вручную, когда это действительно нужно.
📈 Отлично помогает:
▫️при борьбе с циклическими зависимостями;
▫️для optional-бинов;
▫️чтобы ускорить старт приложения.
📲 Мы в MAX
👉@BookJava
