@Configuration vs @Component,

hyeokjin·2022년 6월 24일
0

@Configuration vs @Component

: 스프링 프로젝트를 보다가 스프링 설정에서 두 어노테이션의 차이가 궁금했다.

@Configuration
지정된 클래스가 스프링의 설정정보를 포함한 클래스임을 표시한다.
bean 설정 정보와, componentScan, PropertySource 정보가 포함 되어있다.

@Component
클래스의 객체가 스프링컨텍스트에 등록되게 한다.

정리)
@Configuration은 스프링컨텍스트에 저장된 스프링 설정 정보들을 가져와 사용을 하는 반면,
@Component는 사용자가 스프링컨텍스트에 직접 등록하여 사용한다.


더 쉽게 설명하면,

@Configuration 은 스프링에게 해당 클래스를 Bean으로 구성한 Class임을 알려주는 것 이다
@Bean, @Component 둘다 스프링에 Bean을 등록하는 어노테이션으로 차이는 다음과 같다

@Bean
: 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들때 사용(config 설정파일등)
또는
개발자가 작성한 Method를 통해 반환되는 객체를 Bean으로 만드는 것
(즉, 메서드에 @Bean이 등록됨)

@Component
: 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 어노테이션(직접만든 excel 파일을 bean등록하여 사용하는방법 등..)
(즉, 클래스에 Bean 등록됨)

@Autowired
: Bean 등록시 @Autowired 어노테이션을 이용하여 의존성을 자동으로 주입 할 수 있다
(필드주입보다 생성자 주입이 더 좋다고한다..)

생성자 주입방식은 아래와 같은 장점을 가진다
1. 의존관계 설정이 되지 않으면 객체생성 불가 -> 컴파일 타임에 인지 가능, NPE 방지
2. 의존성 주입이 필요한 필드를 final 로 선언가능 -> Immutable
3. (스프링에서) 순환참조 감지가능 -> 순환참조시 앱구동 실패
4. 테스트 코드 작성 용이
필드 인젝션은 아래와 같은 장점을 가진다
1. 편하다는 것 말고는 없다
참고 : https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/

@Qulifier("object")
: @Autowired 해당 자리에 들어올 수 있는 객체가 여러개인 경우, 즉 다형성을 띄고있는 객체타입에 @Autowired를 사용한 경우 @Qulifier("Bean이름")을 이용하여 해당 자리에 주입될 Bean을 명시해주어야함

@RequiredArgsConstructor
: 생성자로 의존성 주입시 번거로움을 제거하기 위해 lombok을 이용하면 간단한 방법으로 생성자 주입 방식의 코딩이 가능함

profile
노옵스를향해

0개의 댓글