Spring Framework/Spring Boot
[Spring Boot] 등록되는 빈의 순서를 정하자 (@DependsOn)
장쫄깃
2022. 6. 26. 01:16
728x90
들어가며
스프링 프레임워크로 개발시 빈을 등록할 때 빈의 의존관계로 인해 빈들이 등록되는 순서를 지정할 필요가 있다.
(예를 들어, C 빈은 A빈과 B빈 등록 후에 등록되어야 한다.)
이 때 사용하는 어노테이션은 @DependsOn 에 대해 알아보려고 한다.
@DependsOn
@DependsOn 은 어떤 빈이 다른 빈보다 먼저 초기화되도록 강제하며, 에러가 발생하더라도 개발자가 원인을 찾을 수 있도록 메시지를 보여준다.
@Component("A")
public class ComponentA {
// ...
}
@Component("B")
public class ComponentB {
// ...
}
@Component("C")
@DependsOn(value={"A", "B"})
public class ComponentC {
// ...
}
혹은 이렇게도 사용 가능하다.
@Component
public class TestComponent {
@Bean("A")
public void beanA() {
// ...
}
@Bean("B")
public void beanB() {
// ...
}
@Bean("C")
@DependsOn(value={"A", "B"})
public void beanC() {
// ...
}
}
정리하며
결과적으로 @DependsOn을 사용하면 의존한다는 사실을 스프링에게 직접 알려줄 수 있어서 문제는 해결된다. 하지만 다른 사람이 코드를 봤을 때 헷갈릴 수도 있다.
또, 여러 곳에서 작성하다 보면 무한루프(?)가 걸릴 수 있다. (A -> B -> C -> A 등)
때문에, @PostConstruct 혹은 @Order를 사용하는 방법도 있다.
상황에 맞는 적절한 방법을 사용하면 될 것 같다.
728x90