스프링이 빈을 등록하는 방법

스프링 프레임워크는 사용자가 정의한 클래스의 정보를 알지 못한다. 그렇기에 우리가 사용하는 클래스를 객체로 활용하기 위해 스프링에게 알려주는 방법이 스프링 컨텍스트에 등록하는 방법이다.

스프링 컨텍스트(어플리케이션 컨텍스트 라고도 함) 는 사용자가 작성한 클래스 정보를 생성하고 관리하는 공간이며, 이 컨텍스트를 등록하기 위해 사용자는 아래와 같은 방법으로 등록할 수 있다.

  1. Configuration으로 등록한 클래스를 ApplicationContext에 적용하여 Bean 을 등록하는 방법
  2. Component 와 같은 스테레오타입 어노테이션을 사용한 뒤 컴포넌트 스캔으로 등록하는 방법
📝

가능한 스테레오 타입을 권장하고, 스테레오 타입으로 빈을 생성할 수 없는 경우 @Bean 과 @Configuration 클래스를 이용하여 등록한다.

스테레오타입 어노테이션으로 빈을 등록 했다면 객체의 생성을 직접 제어할 수 없지만, @PostConstruct 어노테이션을 사용하면 아래 처럼 직접 객체의 생성자를 제어할 수 있다.

@Component  
public class Parrot {  
  
    private String name;  
  
    @PostConstruct  
    public void init() {  
        this.name = "Kiki";  
    }
@Bean스테레오타입
인스턴스를 생성하고 구성하는 것은 모두 사용자 책임이다.어플리케이션 내부에서 작성한 클래스만 빈을 생성하는 데 사용할 수 있다.(Integer, String X)
📑

결론적으로 사용자가 어플리케이션에서 작성한 클래스 정보만을 가지고 스프링 컨텍스트에 등록할 수 있다면 스테레오타입 어노테이션을 사용하고, 만약 클래스 정보를 추가로 가공해야 하는 경우 빈 어노테이션을 통해 직접 등록한다.

스프링 컨텍스트를 관리하면서 빈의 의존 관계를 주입할 때 위 다섯가지 방법으로 등록하게된다. 만약, 의존관계 주입 시 타입이 같은 여러개의 빈이 등록 되어있다면 에러가 발생하기 때문에, @Primary 로 기본 빈으로 설정하거나, 빈을 호출하는 입장에서 @Qualifier 로 등록하고 싶은 빈을 명시할 수 있다.

서로 같은 빈을 의존 관계로 등록하여 순환 의존성이 발생하면 스프링은 에러를 발생시킨다.