View
@Bean과 @Component는 어떤 객체를 Bean으로 등록하고 싶을 때 사용되는 애노테이션들이다. 그렇다면 이 둘의 차이점이 뭘까? 두개의 애노테이션 모두 Bean으로 등록하겠다는 목적을 가지는 애노테이션인데 왜 둘로 나누어져 있을까?
항상 헷갈렸던 부분이기도 하고 명확한 이해가 없는 것 같아 이번 글에서 확실히 정리해보고자 한다.
1. @Bean
@Bean 같은 경우에는 메서드 위에 선언 가능하고 외부 라이브러리를 Bean으로 등록할 때 사용된다.
이해를 돕기 위해 먼저 @Bean 애노테이션을 살펴보자.
@Target이 METHOD로 지정되어있다. 이는 메서드 위에 선언되어야 한다는 의미이다.
이건 알겠는데.. 왜 외부 라이브러리를 Bean으로 등록할 때 사용되는 걸까?
외부 라이브러리는 ReadOnly File로 @Component를 선언해 줄 수 없다.
즉, 개발자가 직접 컨트롤할 수 없다.
따라서 개발자가 외부 라이브러리를 Bean으로 등록해야 한다면,
인스턴스를 생성하는 메서드를 만든 후, 그 메서드에 @Bean을 선언해 Bean으로 등록할 수 있다.
2. @Component
@Component는 클래스 위에 선언 가능하고, 직접 컨트롤이 가능한 객체에서 사용된다.
마찬가지로 @Component 애노테이션을 살펴보자.
@Target이 TYPE로 설정되어있다.
즉, Class Type 혹은 Interface Type, Enum Type 등에 선언할 수 있다.
아래 사진처럼 개발자가 생성한 클래스 같이 직접 컨트롤할 수 있는 클래스들에는
@Component 애노테이션을 사용한다.
ElementType의 의미가 궁금하다면 ElementType을 살펴보면 된다.
열거형 타입(enum)의 ElementType을 보면 앞서 살펴봤던 METHOD뿐 아니라, TYPE의 의미를 명확히 알 수 있다.
'BackEnd > Spring' 카테고리의 다른 글
[Spring] Transaction 알아보기 (1) | 2022.09.20 |
---|---|
Spring Security (5) | 2020.07.12 |
Java Bean VS Spring Bean (0) | 2020.05.21 |
Swagger를 이용한 API 문서 자동화 (0) | 2020.05.15 |