
일단 자동을 위주로 써야하는 이유
@Component
만 넣어주면 끝나는 일을 @Configuration
설정 정보에 가서 @Bean
을 적고, 객체를 생성하고, 주입할 대상을 일일이 적어주는 과정은 상당히 번거롭다
- 설정 정보가 커지면 설정 정보를 관리하는 것 자체가 부담이 된다
- 자동 빈 등록을 사용해도 OCP, DIP를 지킬 수 있다
자동을 써야하는 경우
- 업무 로직
- 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포 지토리등이 모두 업무 로직이다. 보통 비즈니스 요구사항을 개발할 때 추가되거나 변경된다.
- 업무 로직은 숫자도 매우 많고, 한번 개발해야 하면 컨트롤러, 서비스, 리포지토리 처럼 어느정도 유사한 패턴이 있다. 이런 경우 자동 기능을 적극 사용하는 것이 좋다. 보통 문제가 발생해도 어떤 곳에서 문제가 발생했는지 명 확하게 파악하기 쉽다.
수동을 써야하는 경우
- 기술 지원 로직
- 기술적인 문제나 공통 관심사(AOP)를 처리할 때 주로 사용된다. 데이터베이스 연결이나, 공통 로그 처리 처럼 업무 로직을 지원하기 위한 하부 기술이나 공통 기술들이다.
- 애플리케이션에 광범위하게 향을 미치는 기술 지원 객체는 수동 빈으로 등록해서 딱! 설정 정보에 바로 나타나게 하는 것이 유지보수 하기 좋다.
- 비즈니스 로직 중에서 다형성을 적극 활용할 때
- 어떤 빈들이 주입될지 또는 어떤 빈들이 있는지 확인하기 쉽도록 하기 위함(또는 자동으로 하고 같은 패키지에 묶는 것도 방법)
@Configuration
public class DiscountPolicyConfig {
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
}