정답은 없지만 영한님이 추천해주신 기준은 이렇다.
∨ 빈 자동 등록
- 업무 로직은 '컨트롤러, 서비스, 리포지토리'와 같이 어느정도의 패턴이 있고 로직 수도 매우 많다. 따라서 자동 기능을 권장한다. 문제가 발생한다면 그 위치도 파악하기 쉬운 것이 업무 로직이다.
∨ 빈 수동 등록
- 기술 지원 로직은 애플리케이션 전반에 광범위한 영향을 미치고 그 수도 적다. 또한 업무로직에 비해 기술 지원 로직은 적용이 되고있는지 아닌지 파악이 어려운 경우가 많다. 따라서 수동으로 빈을 등록하여 설정 정보에 바로 나타나게끔 명확히 하는 것이 좋다. (스프링이 제공하는 자동 등록 빈 기능은 예외다. 그건 스프링의 의도대로 사용하자.)
- 비즈니스 로직 중에서도 다형성을 적극 활용하고 있는 경우 수동 빈 등록이 좋을 수도 있다. DiscountPolicy타입에 하위타입들이 주입되는 상황을 생각해보면, 어떤 하위타입 빈들이 주입될지 육안으로 파악하기 어렵다. 그래서 Config에 한번에 보이도록 config에 등록해두면 config만 열어보고도 의존관계를 한눈에 볼 수 있다.
더보기
@Configuration
public class DiscountPolicyConfig {
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
}
만일 자동등록빈으로 하고 싶다면 하나의 패키지에 묶어두자. 패키지를 열어보고 하위 타입 빈이 뭔지 알 수 있도록..
반응형
'web +a' 카테고리의 다른 글
Bean Scope 개념 & 프로토타입 스코프 (0) | 2022.07.14 |
---|---|
스프링빈 생명주기 콜백 메서드 (0) | 2022.07.14 |
annotation 직접 만들기 (@Qualifier 관련) (0) | 2022.07.13 |
@Autowired 조회 빈이 2개 이상일 때 | 문제점 해결 & 해당 타입 빈 모두 보기 (0) | 2022.07.13 |
생성자 코드 최적화 - lombok 라이브러리 (0) | 2022.07.13 |