Using depends-on, Lazy-initialized Beans, Autowiring Collaborators

2024. 11. 14. 12:22Spring Framework/Spring IoC

Using depends-on

Spring의 Java 기반 구성에서는 @DependsOn 어노테이션을 사용하여 빈 간의 초기화 순서를 지정할 수 있습니다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

@Configuration
public class AppConfig {

    @Bean
    @DependsOn("manager")
    public ExampleBean beanOne() {
        ExampleBean exampleBean = new ExampleBean();
        exampleBean.setManager(manager());
        return exampleBean;
    }

    @Bean
    public ManagerBean manager() {
        return new ManagerBean();
    }

    @Bean
    public JdbcAccountDao accountDao() {
        return new JdbcAccountDao();
    }

    @Bean
    @DependsOn({"manager", "accountDao"})
    public ExampleBean beanOneWithMultipleDependencies() {
        ExampleBean exampleBean = new ExampleBean();
        exampleBean.setManager(manager());
        return exampleBean;
    }
}


위 코드에서:

  • @DependsOn("manager")를 사용하여 beanOne이 manager 빈이 먼저 초기화된 후에 초기화되도록 지정합니다.
  • @DependsOn({"manager", "accountDao"})를 사용하여 beanOneWithMultipleDependencies가 manager와 accountDao 빈이 모두 초기화된 후에 초기화되도록 지정합니다.

 

Lazy-initialized Beans

@Lazy 어노테이션을 사용하여 lazy-initialized 빈을 정의할 수 있습니다. 또한, 컨테이너 수준에서 기본적으로 모든 빈을 lazy-initialized로 설정하려면 @Configuration 클래스에 @Lazy 어노테이션을 추가할 수 있습니다.

개별 빈에 대한 lazy initialization

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

@Configuration
public class AppConfig {

    @Bean
    @Lazy
    public ExpensiveToCreateBean lazyBean() {
        return new ExpensiveToCreateBean();
    }

    @Bean
    public AnotherBean notLazyBean() {
        return new AnotherBean();
    }
}


위 코드에서:

  • @Lazy 어노테이션을 lazyBean 메서드에 추가하여 해당 빈이 처음 요청될 때까지 초기화되지 않도록 설정합니다.
  • notLazyBean은 별도의 어노테이션이 없기 때문에, 기본적으로 즉시 초기화됩니다.

컨테이너 수준의 lazy initialization
모든 빈을 lazy-initialized로 설정하려면, @Configuration 클래스에 @Lazy 어노테이션을 추가할 수 있습니다:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

@Configuration
@Lazy
public class AppConfig {

    @Bean
    public ExpensiveToCreateBean lazyBean() {
        return new ExpensiveToCreateBean();
    }

    @Bean
    public AnotherBean notLazyBean() {
        return new AnotherBean();
    }
}


위 코드에서는 @Lazy 어노테이션이 @Configuration 클래스 레벨에 적용되어, 이 클래스 내의 모든 빈이 lazy-initialized 됩니다.
 

Autowiring Collaborators

생략...

'Spring Framework > Spring IoC' 카테고리의 다른 글

Bean Scopes  (0) 2024.11.14
Method Injection  (0) 2024.11.14
Dependencies  (0) 2024.11.14
Dependency Injection  (0) 2024.06.11
Bean Overview  (0) 2024.06.11