>스프링은 애플리케이션이 실행될 때 모든 Bean들을 초기화한다.
애플리케이션 실행시 bean 초기화에 실패하는 경우는 바로 오류로 나오기에, 장애를 바로 캐치할 수 있다.
>이런 장점이 있는 반면,
의존성이 많은 애플리케이션의 경우에는 ( Bean설정 등 할것이 많은 경우 ) 애플리케이션 실행시간이 늦어지게 될것이다.
>이런 상황에, 애플리케이션에 필요한 Bean들을 미리 초기화하는것이 아닌, 필요로 할때 Bean객체를 생성하도록 하는것이 Lazy 이다.
>빈을 만들때 @Bean @Lazy 를 붙여서 만들면 된다.
>하지만 ,
@Lazy가 붙은 빈을 다른클래스에서 주입받는다면 ,
Lazy하지 않게 된다. 왜냐하면, 주입을 하는 시점에 @Lazy가 붙은 빈이 필요로 하게되고, lazy해야하는것이 이미 생성되어 버린다.
> 이럴떄, 즉, DI 할때 Lazy하게 하는 방법은 무엇이 있을까
--> 바로 생성자 주입시 @Lazy 어노테이션만 붙여주면 된다.
==================================================================
한번에 모든 빈들을 Lazy하게 설정해주는 방법은 없을까?
> BeanFactoryPostProcessor Bean을 선언해주는 conifg클래스를 만들어주고 아래처럼 설정하면 된다.
@Configuration
public class abcConfig{
@Bean
public static BeanFactoryPostProcessor beanFactoryPostProcessor(){
return beanFactory->{
for(String beanName: beanFactory.getBeanDefinitionNames()) { //빈팩토리의 모든 빈들에대해
beanFactory.getBeanDefinition(beanName).setLazyInit(true)); //for문을돌면서 lazy처리해줌
}
}
}
'Spring' 카테고리의 다른 글
httpclient cannot be resolved to a type _ httpclientbuilder cannot be.... 에러 sts에서 자동 import안될때 (0) | 2020.01.14 |
---|---|
No converter for [class com.example.Model.ResponseNaverMovie] with preset Content-Type 'application/json;charset=UTF-8' 에러 (0) | 2020.01.14 |
jsp_ajax_json_practice (1) (0) | 2020.01.14 |
Spring + Mybatis + MariaDB 연동하기 (0) | 2020.01.14 |
싱글톤 패턴 (0) | 2020.01.12 |