Javadocs

[Spring] 스프링 빈(Bean)을 등록하는 두 가지 방법(@Conponent, @Bean) 본문

Programming/Spring(코드로 배우는 스프링 웹 프로젝트)

[Spring] 스프링 빈(Bean)을 등록하는 두 가지 방법(@Conponent, @Bean)

Javatist 2023. 4. 3. 12:01

# Bean??

Bean을 이해하기 위해 스프링 컨테이너(Spring Container 또는 IoC 컨테이너)에 대해 알 필요가 있습니다.
자바 애플리케이션은 애플리케이션 동작을 제공하는 객체들로 이루어져 있습니다. 
이 때, 객체들은 독립적으로 동작하는 것 보다서로 상호 작용하여 동작하는 경우가 많습니다. 
이렇게 상호작용하는 객체를 '객체의 의존성'이라고 표현합니다. Spring에서는 스프링 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI, Dependency Injection)하는 역할을 해줍니다. 

그리고 스프링 컨테이너에 등록한 객체들을 '빈(Bean)'이라고 합니다.


# 스프링 컨테이너에 Bean 을 등록하는 두 가지 방법

  1.  컴포넌트 스캔과 자동 의존 관계 설정
  2.  자바 코드로 직접 스프링 빈 등록

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

스프링 부트에서 사용자 클래스를 스프링 빈으로 등록하는 가장 쉬운 방법은 클래스 선언부 위에 @Component 어노테이션을 사용하는 것입니다. 
@Controller, @Service, @Repository는 모두 @Component를 포함하고 있으며
해당 어노테이션으로 등록된 클래스들은 스프링 컨테이너에 의해 자동으로 생성되어 스프링 빈으로 등록됩니다.


2. 자바 코드로 직접 스프링 빈 등록

수동으로 스프링 빈을 등록하려면 자바 설정 클래스를 만들어 사용해야 합니다.

설정 클래스를 만들고 @Configuration 어노테이션을 클래스 선언부 위에 추가하면 됩니다.
그리고 특정 타입을 리턴하는 메서드를 만들고, @Bean 어노테이션을 붙여주면 자동으로 해당 타입의 빈 객체가 생성됩니다. 

MemberRepository는 인터페이스, MemoryMemberRepository가 구현체이기 때문에 MemoryMemberRepository를 new 해줍니다. 

@Bean 어노테이션의 주요 내용은 아래와 같습니다.

  • @Configuration 설정된 클래스의 메서드에서 사용가능 
  • 메서드의 리턴 객체가 스프링 빈 객체임을 선언함
  • 빈의 이름은 기본적으로 메서드의 이름
  • @Bean(name = "name")으로 이름 변경 가능
  • @Scope를 통해 객체 생성을 조정할 수 있다.
  • @Component 어노테이션을 통해 @Configuration 없이도 빈 객체를 생성할 수도 있음
  • 빈 객체에 init(), destory() 등 라이프 사이클 메서드를 추가한 다음 @Bean에서 지정할 수 있음.

어노테이션 하나로 해결되는 1번 방법이 간단하고 많이 사용되고 있지만, 상황에 따라 2번 방법도 사용됩니다.
- 1번 방법을 사용해서 개발을 진행하다 MemberRepository를 변경해야 할 상황이 생기면 1번 방법은 일일이 변경해줘야 한다.
- But, 2번 방법을 사용하면 다른건 건들일 필요 없이 @Configuration에 등록된 @Bean만 수정해주면 되므로, 수정이 용이합니다. 


# 등록된 스프링 빈을 @Autowired로 사용하기 

스프링 부트의 경우 @Component, @Controller, @Service, @Repository, @Bean, @Configuration 등으로 빈들을 등록하고 필요한 곳에서 @Autowired를 통해 의존성 주입을 받아 사용하는 것이 일반적입니다. 

 


[ 참고 ]

https://dev-coco.tistory.com/69

Comments