-
@Bean vs @ComponentSpring Framework 2022. 5. 24. 01:55728x90
@Bean과 @Component를 언제 사용해야 할지 명확하게 대답할 수 없었기 때문에 이를 공부하고자 했습니다.
@Bean과 @Component란?
Ioc Container는 @Configuration, @Bean, @Component, @Repository, @Service, @Controller가 달린 클래스를 감지하여 빈을 가져오기 옵니다.
이때 대표적으로 빈을 등록하는 어노테이션이 바로 @Bean과 @Component입니다.
(실제로 @Repository, @Service, @Controller 내부에는 @Component가 정의되어 있습니다.)
@Bean이란?
단일 bean을 명시적으로 선언하는 데 사용됩니다.
클래스 정의에서 빈 선언을 분리하고 선택한 방식대로 빈을 만들고 구성할 수 있습니다.
@Component란?
Component Scan을 사용하여 빈을 자동으로 감지하고 자동 구성하는 데 사용됩니다.
@Component 어노테이션이 달린 클래스를 찾아 자동으로 빈을 등록합니다.
둘 다 Spring Bean을 생성할 때 사용하는 어노테이션인데 왜 2개로 나누어져 있을까요?
@Bean의 경우에는 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용합니다.
ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할 수 없으므로 ObjectMapper의 인스턴스를 생성하는 메서드를 만들고 해당 메서드에 @Bean을 선언하여 등록합니다.
반대로 개발자가 직접 만든 클래스 즉, 직접 컨트롤이 가능한 경우에는 @Component를 사용합니다.
이때 개발자가 생성한 Class에는 @Bean으로 관리할 수 있을까요?
정답은 불가능합니다.
@Bean과 @Component는 각자 선언할 수 있는 타입이 정해져있어 해당 용도 외에는 컴파일 에러를 발생시킵니다.
결론
@Bean @Component 메소드에 사용 클래스에 사용 개발자가 컨트롤이 불가능한
외부 라이브러리 사용시 사용개발자가 직접 컨트롤이 가능한
내부 클래스에 사용출처
https://jojoldu.tistory.com/27
https://ecsimsw.tistory.com/629
https://youngjinmo.github.io/2021/06/bean-component/
'Spring Framework' 카테고리의 다른 글
@Transactional 어노테이션이란? (0) 2022.09.14 @SpringBootApplication의 역할 (0) 2022.06.24 필터와 인터셉터의 차이점 (0) 2022.05.22 스프링 부트 - 회원 관리 예제 실습 (순수 JDBC로 H2 데이터베이스 연동) (0) 2022.04.24 스프링 부트 - 회원 관리 예제 실습 (H2 데이터베이스 설치) (0) 2022.04.16