Spring Boot

[Spring] Bean 등록 방법(@Bean, @Component)

HEY__ 2022. 7. 14. 17:01
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

 

<순차>

1. @Configuration

2. @Bean을 통한 빈 등록

3. @ComponentScan, @Component를 통한 빈 등록

 

⛅️ @Configuration

스프링이 뜰 때에 스프링은 자동으로 @Configuration이 붙은 클래스를 찾아서 구성 정보로 사용한다.

이 클래스에서 Bean을 등록하고 의존관계주입을 처리할 수 있다.

 

AppConfig라는 클래스에 @Configuration 어노테이션을 붙여 구성 정보로 사용한다고 가정하자.

 

@Configuration을 붙이면, CGLIB 라이브러리가 AppConfig 클래스를 상속받아 싱글톤을 보장하는 클래스(AppConfig@CGLIB)를 생성한다.

(자세한 내용은 이전 포스팅(https://m42-orion.tistory.com/98)에서 알아보았다.)

 

빈을 스프링 컨테이너에 등록하는 방법에는 두 가지가 있다.

@Bean을 통해 직접 등록하는 방법과 @ComponentScan을 이용하여 자동으로 빈 등록하는 방법이 있다.


⛅️ @Bean을 통한 빈 등록

@Configuration
public class AppConfig {
    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}

@Configuration 구성 정보에 @Bean 어노테이션을 통해 스프링 컨테이너에 직접 빈으로 등록할 수 있다.

빈 객체로 등록하고 싶은 메서드의 위에 @Bean 어노테이션을 추가하면 된다.

 

스프링 컨테이너에 <key(빈 이름), value(빈 객체)> 쌍으로 저장한다.

key(빈 이름)에는 메서드의 이름(memberRepository)를, value(빈 객체)에는 실제 반환하는 객체를 담아 스프링 컨테이너에 저장한다.

 


⛅️ @ComponentScan, @Component를 통한 빈 등록

@Configuration이 붙은 클래스에 @ComponentScan를 붙여 @Component가 붙은 객체를 찾아 자동으로 빈 등록하는 방법이 있다.

 

1. 우선 AppConfig에 @ComponentScan 어노테이션을 추가로 붙인다.

@Configuration
@ComponentScan
public class AppConfig {
...
}

 

2. 빈 객체로 등록하고 싶은 클래스에 @Component 어노테이션을 추가한다.

    @Component 어노테이션이 추가되면, 컴포넌트 스캔의 대상이 된다.

@Component
public class MemoryMemberRepository implements MemberRepository {
...
}

 

스프링은 @Configuration 어노테이션을 가진 클래스를 우선 찾는다. 

해당 클래스에 @ComponentScan 어노테이션이 있다면 @Component 어노테이션이 있는 클래스들을 찾아 스프링 컨테이너에 빈으로 등록한다.

 

 

 

 

 

 

728x90