Sobes.tech
Back to questions
Junior — Middle
55

Каким образом можно реализовать отложенную инициализацию компонентов в Spring?

Companies where asked
Firecode

Answer from AI

sobes.tech AI

В Spring отложенная инициализация компонентов (Lazy Initialization) позволяет создавать бины только при первом обращении к ним, а не при запуске приложения. Это помогает ускорить старт и снизить потребление ресурсов.

Для реализации отложенной инициализации можно использовать аннотацию @Lazy:

@Component
@Lazy
public class HeavyComponent {
    public HeavyComponent() {
        System.out.println("HeavyComponent создан");
    }
}

Если бин объявлен с @Lazy, Spring создаст его только при первом запросе из контекста.

Также можно использовать @Lazy на уровне конфигурации:

@Configuration
public class AppConfig {
    @Bean
    @Lazy
    public HeavyComponent heavyComponent() {
        return new HeavyComponent();
    }
}

Кроме того, можно внедрять ленивые бины через ObjectProvider или Provider, чтобы контролировать момент создания:

@Autowired
private ObjectProvider<HeavyComponent> heavyComponentProvider;

public void useComponent() {
    HeavyComponent component = heavyComponentProvider.getIfAvailable();
    // бин создастся здесь, если ещё не создан
}

Таким образом, Spring предоставляет гибкие механизмы для отложенной инициализации компонентов.