@Component

허준기·2024년 2월 1일
0

스프링

목록 보기
6/7
post-thumbnail

@Component를 알기 전에 먼저 빈(bean)에 대해서 알아야 한다

Bean

빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다
  • 인스턴스화 된 객체
  • @Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록
  • 클래스의 등록 정보, getter/setter 메서드 포함
  • @Component 어노테이션이 있으면 자동 등록
    - @Controller, @Service, @Repository도 자동 등록
  • @Autowired 어노테이션이 있으면 스프링이 연관된 객체를 스프링 컨테이너에 찾아서 넣어줌 → 의존성 주입
  • 기본적으로 모든 은 스코프가 명시적으로 지정되지 않으면 싱글톤(단 하나의 객체만 존재 가능

다시 말해서 스프링 컨테이너에 의해서 자바 객체가 만들어지게 되면 이 객체를 빈(Bean)이라고 부른다.
일반 자바 객체와의 차이점은 없다

@Component

스프링부트@Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로 필요한 들을 등록하고 필요한 곳에서 주입받아 사용한다고 한다

그림에서 볼 수 있듯이 @Service, @Controller, @Repository 들은 @Component를 상속받는다

위의 어노테이션을 붙이면 이 클래스를 으로 등록시키라고 알려주는 것이다. 이 어노테이션이 붙어있으면 자동으로 클래스의 인스턴스를 생성하고 종속성을 포함하여 각종 생명주기를 관리해준다.

이렇게 되면 개발자는 객체 생성, 관리에 대한 걱정이 줄고 비즈니스 로직 자체에 집중할 수 있다.

@Bean

@Component@Bean 둘 다 스프링 컨테이너Bean을 등록하는 어노테이션이다.
그럼 뭐가 다를까?

@Component는 개발자가 직접 만든 클래스를 Bean으로 등록하기 위한 어노테이션이고, @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들 떄 사용하는 어노테이션이다.

내가 만들었으면 @Component 아니면 @Bean인가보다

쓰다보니 Bean에 대한 내용이 더 많은 것 같군..

참고

https://coding-nyan.tistory.com/158
https://cbw1030.tistory.com/54
https://www.baeldung.com/spring-component-annotation

profile
나는 허준기

0개의 댓글