[Spring Framework] 스프링 빈(Bean)

🫘 스프링 빈(Bean) 이란?

스프링 빈은 스프링 컨테이너에서 관리되는 자바 객체를 의미한다.
스프링은 제어의 역전(IoC, Inversion of Control)을 사용해 객체의 생성과 소멸을 개발자가 아닌 스프링 컨테이너가 관리하게 만든다. 즉, 사용자가 직접 new로 객체를 생성하는 대신, 스프링이 객체를 생성하고 주입하는 방식으로 제어권을 스프링에게 넘기는 것이다.


🔧 스프링 빈을 스프링 컨테이너에 등록하는 방법

여기서 XML로 Bean을 등록하는 방법도 있지만 최근에는 잘 사용하지 않으므로 생략한다.

🔍 컴포넌트 스캔과 자동 의존관계 설정

@Component 애노테이션을 사용하면 해당 클래스는 스프링 컨테이너에 자동으로 빈으로 등록된다. 스프링은 컴포넌트 스캔을 통해 @Component가 붙은 클래스들을 찾아서 빈으로 등록하는데, @Controller, @Service, @Repository도 내부적으로 @Component를 포함하고 있어서 자동으로 빈 등록이 가능하다.

alt text

예시:

1
2
3
4
5
6
7
8
9
10
@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
  • @Autowired: 생성자에 붙은 이 애노테이션은 스프링이 자동으로 의존성을 주입하도록 만든다. MemberControllerMemberService 객체를 의존하는데, @Autowired가 있으면 스프링 컨테이너에 등록된 MemberService 빈을 찾아 자동으로 주입해 준다.

🖊️ 자바 코드로 직접 스프링 빈 등록

@Configuration@Bean 애노테이션을 사용하여 직접 스프링 빈을 등록할 수 있다. 이는 컴포넌트 스캔이 아닌 명시적인 방식으로 빈을 등록하는 방법이다. 주로 정형화되지 않은 빈을 등록하거나 구현 클래스를 상황에 맞게 변경해야 할 때 사용한다.

예시:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}
  • @Bean: @Bean이 붙은 메서드는 반환된 객체가 스프링 컨테이너에 빈으로 등록된다.
  • @Configuration: 이 클래스는 스프링 설정 파일로 인식되며, @Bean 메서드들을 통해 빈을 등록할 수 있다.

참고

Leave a comment