[Spring] Bean 자동등록 VS Bean 수동등록
어노테이션으로 스프링 컨테이너에 Bean을 등록하는 방법은 2가지가 있다.
1) 컴포넌트 스캔으로 자동등록 ( @Component, @Service, @Repository ... )
2) @Configuration 클래스에 수동등록 ( @Bean )
두 가지 방식은 언제 어떻게 사용하는 것이 좋을까?
1) 업무로직 VS 기술지원
자동방식은 컴포넌트 스캔으로 @Component로 선언된 클래스를 자동으로 Bean으로 등록하니 편하다. 그러나 @Component가 여기저기 퍼져 있어 추적이 힘들다. 수동방식은 @Configuration 클래스를 생성하고 Bean을 하나하나 정의해야 하는 번거로움이 있지만 하나의 클래스에 Bean이 모여 있다보니 관리가 쉽다.
그러므로
자동등록 방식은 업무로직 Bean에 사용하는 것이 좋고 ( Service, Controller, Repository 등등 )
수동등록 방식은 기술지원 Bean에 사용하는 것이 좋다. ( Util , 공통로그, DB연결 등등 )
업무로직은 특정한 분야가 있다. 특정한 분야는 특정한 패키지에 묶어 관리한다. 그러므로 한정된 패키지 안에서 @Component를 관리하기가 쉽다. 기술지원은 전영역에 걸쳐 사용된다. 정해진 패키지 없이 광범위하게 사용하는 기술지원 Bean은 @Configuration 클래스에서 수동으로 등록하여 하나의 파일에서 관리해주는 것이 좋다.
2) 내가 작성한 코드 VS 외부 라이브러리
@Component는 코드 내에 삽입하는 어노테이션이다.
외부 라이브러리 안의 클래스에는 @Component를 추가할 수 없다.
그러므로
외부 라이브러리 클래스인 경우, 설정클래스에 @Bean으로 등록해주고
내가 작성한 클래스인 경우, @Component를 삽입하여 Bean으로 등록해준다.
참고자료