hyungmuk's blog

스프링 입문 강좌 정리 - 빈 (Bean) 본문

개발 & 공부/스프링

스프링 입문 강좌 정리 - 빈 (Bean)

hyungmuk 2020. 3. 19. 04:16

빈이란 ?

객체인데 IoC 컨테이너가 관리하는 객체를 말한다.

 

<1번>
<2번>

같은 OwnerController 지만 1번은 빈이 아니지만 2번은 빈이다.

왜냐하면 1번은 new가 사용 되었고 2번은 applicationContext에서 관리하는 객체를 가져온 것이기 때문이다.

  • 빈은 applicationContext가 알고 있는객체, 즉, applicationContext가 관리하는 객체여야 한다.
  • 이러한 '빈'들만 의존성 주입이 가능하다.

빈 등록 방법

  • Component Scannig
    • @Component
      • @Repository
      • @Service
      • @Controller
      • @Configuration
    • 직접 XML이나 자바 설정 파일에 등록

빈을 꺼내는 방법

  • @Autowired 또는 @Inject 사용
  • ApplicationContext에서 getBean()으로 직접 꺼냄

컴포넌트 스캔

@ComponentScan, @SpringBootApplication(스프링부트인 경우) 어노테이션이 있는 파일 위치에서부터 모든 하위 패키지에 있는 모든 클래스를 다 찾아서 @Component, @Repository, @Service, @Controller, @Configuration 등의 어노테이션이 붙어 있는 클래스를 빈으로 등록한다.

@Repository는 특이한 형태로 빈으로 등록이 된다. 스프링 데이터 JPA가 제공해주는 기능에 의해서 빈으로 등록 된다. 특정한 어노테이션이 없더라도 특정한 인터페이스를 상속받고 있는 클래스를 찾아서 구현체를 내부적으로 알아서 빈으로 등록 해준다.

직접 빈 정의

  • return 하는 객체 자체가 빈으로 등록이 된다.
  • 빈을 직접 정의하면 @Component 같은 ****어노테이션을 붙이지 않아도 된다.

@Autowired 어노테이션 사용

  • IoC 컨테이너에 들어있는 빈을 주입받아서 사용할 수 있게 한다.
  • applicationContext.getBean()을 사용하는 방법보다는 이방법을 많이 사용한다.

https://www.youtube.com/watch?v=qaIQfl0ob84&list=PLfI752FpVCS8_5t29DWnsrL9NudvKDAKY&index=7