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