라라리라

[Spring] @Configuration과 @Bean 어노테이션 본문

코딩/다이어리

[Spring] @Configuration과 @Bean 어노테이션

헤실 2024. 2. 8. 16:33
@Configuration과 @Bean 어노테이션
@Configuration
- 클래스에 붙이는 어노테이션
-@Bean과 함께 사용 해주어야 한다.

 

@Bean
- 메소드에 붙이는 어노테이션
- 메소드에서 반환되는 객체를 Spring Bean에 등록한다.

 

@Configuration과 @Bean을 사용해보기 위해 @Repository를 주석처리했다.
@Repository 어노테이션이 주석처리되어 스프링 컨테이너로 부터 의존성 주입을 받지못하는 모습.

@Repository 어노테이션이 없으니 UserRepository 클래스는 더이상 스프링 빈이 아니고,
스프링 컨테이너는 UserService에게 더이상 필요한 의존성 주입을 할 수 없게된다.

@Configuration과 @Bean을 통해 Repository를 스프링 Bean으로 등록해보자.

 

UserRepository를 반환하는 메서드를 가지고있는 UserConfiguration 클래스를 만들고, @Configuration, @Bean 어노테이션을 붙여주었다.
repository가 정상적으로 스프링 빈으로 등록되어, 필요한 의존성을 주입받게된 UserService의 모습

 

스프링 컨테이너가 작동할때, @Configuration 클래스들을 스캔하고 @Bean이 붙은 메서드의 반환값을 
Spring Bean으로 등록하였기 때문에, @Repository 어노테이션 없이도 필요한 의존성을 주입해줄수 있다.

그럼 @Service와 @Repository는 언제 사용하는게 좋을까? 
개발자가 직접만든 클래스를 Spring Bean으로 넣을때 사용하면 좋다.
위 예제의 UserRepository도 @Repository를 사용하는것이 좋다.

 

@Configuration과 @Bean은 언제 사용하는게 좋을까?
외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때 사용하면 좋다.

 


스프링 컨테이너는 어떻게 클래스와 Bean을 스캔할까?

앞서 봤던 모든 어노테이션에는 @Component 어노테이션이 숨어있었다.

@Component 어노테이션은 뭘까?
- @Component 어노테이션이 붙어있는 클래스들을 '컴포넌트'로 간주한다.
- '컴포넌트'가 붙은 클래스들은 스프링 서버가 실행될때 자동으로 감지된다.
@Component 어노테이션이 단독으로 사용되는 경우 : 
컨트롤러,서비스,리포지토리도 아닌데 개발자가 직접 작성한 클래스를 스프링 빈으로 등록할 때 사용되기도 한다.