@Component
를 알기 전에 먼저 빈(bean)
에 대해서 알아야 한다
빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다
인스턴스화
된 객체@Bean
어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너
에 등록@Component
어노테이션이 있으면 자동 등록@Controller
, @Service
, @Repository
도 자동 등록@Autowired
어노테이션이 있으면 스프링이 연관된 객체를 스프링 컨테이너
에 찾아서 넣어줌 → 의존성 주입
빈
은 스코프가 명시적으로 지정되지 않으면 싱글톤
(단 하나의 객체만 존재 가능다시 말해서 스프링 컨테이너
에 의해서 자바 객체가 만들어지게 되면 이 객체를 빈(Bean)
이라고 부른다.
일반 자바 객체와의 차이점은 없다
스프링부트
는 @Component
, @Service
, @Controller
, @Repository
, @Bean
, @Configuration
등으로 필요한 빈
들을 등록하고 필요한 곳에서 주입받아 사용한다고 한다
그림에서 볼 수 있듯이 @Service
, @Controller
, @Repository
들은 @Component
를 상속받는다
위의 어노테이션을 붙이면 이 클래스를 빈
으로 등록시키라고 알려주는 것이다. 이 어노테이션이 붙어있으면 자동으로 클래스의 인스턴스
를 생성하고 종속성
을 포함하여 각종 생명주기
를 관리해준다.
이렇게 되면 개발자는 객체 생성, 관리에 대한 걱정이 줄고 비즈니스 로직 자체에 집중할 수 있다.
@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