스프링 영한님 강의중..
@Bean 은 해당 어노테이션이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너를 등록하고, 이렇게 등록된 객체를 스프링 빈이라 하며, 싱글톤으로 관리가 된다.
@Component 는 @ComponentScan 이 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록하게 되는데, 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용하게 된다.
이렇게 보면 둘다 스프링 빈으로 등록하게 되는건 알겠는데 무슨 차이가 있을까?
@Bean
@Bean 어노테이션은 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 직접 등록하고 싶은 경우에 사용 된다.
AppConifg 라고 직접만든 설정 정보 클래스인데 이 클래스는 @Configuration 어노테이션을 사용하였습니다. 그래서 해당 클래스는 설정(구성) 정보로 사용되는데, 이렇게 외부 라이브러리에 @Bean을 사용하면 반환된 객체를 스프링 컨테이너에 등록되어 관리가 된다.
실제 @Bean 내부로 들어가서 코드를 보면 @Target이 METHOD로 지정이 되어있다. 즉 메서드 위에서만 선언이 가능하다.
@Component
반면에 개발자가 직접 컨트롤이 가능한 클래스들의 경우에는 @Component를 사용하면 된다.
스프링에서 많이 사용하는 @Repository, @Controller, @Service 은 @Component의 구체화된 형태로 내부에 @Component가 있어 컴포넌트 스캔의 대상이 되어 자동으로 스프링 빈에 등록하게 된다.
@Component도 내부를 보면 @Target이 TYPE으로 지정되어 클래스 위에서만 선언이 가능합니다.
참고 - 향로님 블로그
'스프링' 카테고리의 다른 글
싱글톤 패턴(Singleton) (0) | 2022.05.26 |
---|---|
REST ? RESTful ? REST API? (0) | 2022.05.26 |
관심사의 분리(Seperation Of Concern) (2) | 2022.05.18 |
스프링(Spring)은 왜 사용할까? (0) | 2022.03.25 |
웹 서버(Web Server) 와 웹 애플리케이션 서버(WAS) (0) | 2022.01.27 |