@Bean

빈으로 등록하고 싶은 자바 객체

public class YukongResource {

		// 구현
}

Config

@Configuration
public class ResourceConfig {

		// 'yukongResource' 이름을 가진 빈 생성
    @Bean
    public YukongResource yukongResource() {
        return new YukongResource();
    }
}

@Bean 을 이용해 수동으로 빈을 등록해줄 때에는 메소드 이름으로 빈 이름이 결정된다. 그러므로 중복된 빈 이름이 존재하지 않도록 주의해야 한다.

빈 등록 과정

스프링 컨테이너는 @Configuration 이 붙어있는 클래스를 자동으로 빈으로 등록해두고, 해당 클래스를 파싱해서 @Bean 이 있는 메소드를 찾아 빈을 생성한다.

하지만 어떤 임의의 클래스를 만들어서 @Bean 어노테이션을 붙인다고 되는 것은 아니고, 반드시 @Configuration 어노테이션이 붙은 객체 내에서 등록해야 한다.

스프링 빈으로 등록된 다른 클래스 안에서 @Bean 으로 직접 빈을 등록해주는 것도 동작은 한다. 하지만 @Configuration 안에서 @Bean 을 사용해야 싱글톤을 보장받을 수 있다.

@Bean 을 @Configuration 안에서 사용해야 하는 이유

@Bean 어노테이션을 사용하여 빈을 등록하는 경우

  1. 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때

  2. 어플리케이션 전범위적으로 사용되는 클래스를 등록할 때

  3. 다형성을 활용하여 여러 구현체를 등록해주어야 할 때

    ⇒ 하나의 설정 파일에 모두 등록하여 한눈에 파악하기 쉽다.

https://www.notion.so/3-Annotation-based-Configuraion-94c64d255b8842b0b9b8e5daf45b1262#50d7155ae34a433189688c8ce3b2f274