본문 바로가기

web +a

자동/수동 빈에 대한 올바른 선택

정답은 없지만 영한님이 추천해주신 기준은 이렇다.

 

 

∨ 빈 자동 등록

- 업무 로직은 '컨트롤러, 서비스, 리포지토리'와 같이 어느정도의 패턴이 있고 로직 수도 매우 많다. 따라서 자동 기능을 권장한다. 문제가 발생한다면 그 위치도 파악하기 쉬운 것이 업무 로직이다. 

 

 

 빈 수동 등록

- 기술 지원 로직은 애플리케이션 전반에 광범위한 영향을 미치고 그 수도 적다. 또한 업무로직에 비해 기술 지원 로직은 적용이 되고있는지 아닌지 파악이 어려운 경우가 많다. 따라서 수동으로 빈을 등록하여 설정 정보에 바로 나타나게끔 명확히 하는 것이 좋다. (스프링이 제공하는 자동 등록 빈 기능은 예외다. 그건 스프링의 의도대로 사용하자.)

- 비즈니스 로직 중에서도 다형성을 적극 활용하고 있는 경우 수동 빈 등록이 좋을 수도 있다. DiscountPolicy타입에 하위타입들이 주입되는 상황을 생각해보면, 어떤 하위타입 빈들이 주입될지 육안으로 파악하기 어렵다. 그래서 Config에 한번에 보이도록 config에 등록해두면 config만 열어보고도 의존관계를 한눈에 볼 수 있다.

더보기
@Configuration
public class DiscountPolicyConfig {
    @Bean
    public DiscountPolicy rateDiscountPolicy() {
        return new RateDiscountPolicy();
    }
    @Bean
    public DiscountPolicy fixDiscountPolicy() {
        return new FixDiscountPolicy();
    }
}

만일 자동등록빈으로 하고 싶다면 하나의 패키지에 묶어두자. 패키지를 열어보고 하위 타입 빈이 뭔지 알 수 있도록..

 

 

반응형
다른 블로그