본문 바로가기

Programming/Java & JSP & Spring

Spring 순환참조(Circular Depencies) 해결하기

스프링에서 빈 순환참조가 일어날 때 회피하는 방법을 알아보자.

Redesign

사실상 재설계하는 것이 가장 바람직한 방법이다.

하지만 실제 운용할 때에는 재설계할 수 없는 상황이 허다할 것이다. (레거시와 많이 엮여있거나, 이미 테스트가 끝난 경우)

Use @Lazy

가장 심플한 방법으로 주입하는 곳에 @Lazy 키워드를 붙이는 것으로 해결할 수 있다.

완전히 빈을 초기화하는 것 대신에 프록시가 대신 주입되는 방법이다.

실제로 해당 빈이 사용될 때 빈이 주입되는 방식이다.

Use Setter/Field Injection

가장 많이 사용되는 순환참조 회피 방법으로 Constructor 주입 방법 대신 Setter, Field 주입 방법을 사용하는 것이다.

Use @PostConstructor

빈 주입을 @Autowired 대신 @PostConstructor 어노테이션을 사용하여 빈 주입 순서를 명확히 정해주는 방법이다.