본문 바로가기
Study/Spring

[Spring] @Component @Bean

by 오늘만 사는 여자 2021. 11. 5.
728x90
반응형

@Component

싱글톤 클래스 빈을 생성하는 어노테이션이다. 물론 @Scope("Prototype") 어노테이션을 통해 싱글톤이 아닌 빈을 생성할 수 있다. 또한 @Service, @Repository 어노테이션 또한 이에 포함된다.

 

이 어노테이션은 선언적인 어노테이션이다. 즉, 패키지 스캔 안에 이 어노테이션은 " 이 클래스를 정의했으니 빈으로 등록해줘" 라는 뜻이 된다.

 

@Component

 

Java Bean에 등록하지 않아도 자동 주입이 가능하도록 해주는 어노테이션입니다. 개발자가 직접 개발한 클래스를 Bean에 등록할 경우 @Component 어노테이션을 사용하면 됩니다.

@Bean

주로 @Configuration 어노테이션이 들어간 Spring을 설정하는 클래스 내에 들어가는 메소드에서 선언한다. 만약  이를 @Component로 따지면, 스프링은 스캔할 패키지를 검색해서 @Component 어노테이션을 발견하면 이렇게 등록하는 꼴이 된다.

 

@Component
public class MyBean {
    // ...
}

// 스프링 내부 처리를 이해하기 쉽게 표현하면?

@Bean
public MyBean myBean() {
    return new MyBean();
}

물론 생성자에 인자기 있다면 그 빈이 있는지 확인 후 넣는다. 물론 없으면 스프링은 오류를 뱉으며 앱을 끝내버린다.

 

정리

일반적인 당신의 빈 등록은 간편하게 @Component 어노테이션으로, 유연한 빈 등록이 필요하다면 @Configuration 어노테이션이 들어간 클래스 내 @Bean 어노테이션 메소드 선언으로!
아, Spring Boot의 경우 @SpringBootApplication 어노테이션이 들어간 스프링 실행부에서도 @Bean 어노테이션이 깃든 메소드 등록이 가능하다는 것도 잊지 말자.

728x90
반응형

댓글