[Spring] Bean

Jeon817·2023년 4월 18일

Spring

목록 보기
6/11

[Bean 이란?]

  • Spring IoC 컨테이너가 인스턴스화하고, 관리하는 자바 객체를 빈(Bean)이라 합니다. 우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니고 ApplicationContext.getBean()으로 얻어질 수 있는 객체가 빈 입니다.
    즉, Spring에서의 빈은 ApplicationContext가 알고있는 객체,
    ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미합니다.


[애플리케이션의 모든 객체를 Spring 빈으로 구성해야 하는가?]

공식 문서에 따르면 서비스 계층 개체, 데이터 액세스 개체(DAO), 프리젠테이션 개체, Hibernate SessionFactories, JMS 대기열 등과 같은 인프라 개체에 대한 Bean을 정의해야 합니다 .

또한 일반적으로 컨테이너에 세분화된 도메인 개체를 구성하면 안 됩니다. 일반적으로 도메인 객체를 생성하고 로드하는 것은 DAO와 비즈니스 로직의 책임입니다.



[Spring IoC 컨테이너에 빈을 등록하는 방법]

1) Component Scanning

  • @ComponentScan 어노테이션과 @Component 어노테이션을 사용해서 빈을 등록하도록 하는 방법입니다.

    1) @SpringBootApplication은 내부적으로 @ComponentScan 애노테이션을 사용하는데 이 @ComponentScan 애노테이션은 어디서부터 컴포넌트를 찾아볼 것인지 알려주는 역할을 합니다.
    2) @ComponentScan이 붙어있는 클래스가 있는 패키지에서부터 모든 하위 패키지의 모든 클래스를 훑어보며 @Component 애노테이션(또는 @Component 애노테이션을 사용하는 다른 애노테이션)이 붙은 클래스를 찾습니다.
    (@Controller, @Service 도 내부적으로 @Component를 사용함)

  • Spring이 IoC 컨테이너를 만들때 위와 같은 과정을 거쳐 빈으로 등록합니다

2) 빈 설정파일에 직접 등록

  • 자바 설정파일로 작성할 수 있습니다. 자바 설정파일은 자바 클래스를 생성해서 작성할 수 있으며 일반적으로 xxxxConfiguration와 같이 명명하고 클래스에 @Configuration 애노테이션을 붙입니다.
    그 안에 @Bean 애노테이션을 사용해 직접 빈을 정의합니다(빈을 직접 정의해서 등록하면 @Component 애노테이션을 붙이지 않아도 된다).
    @Configuration 애노테이션을 보면 이 애노테이션도 @Component를 사용하기 때문에 @ComponentScan의 스캔 대상이 되고 그에 따라 빈 설정파일이 읽힐때 그 안에 정의한 빈들이 IoC 컨테이너에 등록되는 것입니다.

참고, bean
참고, IoC 컨테이너

0개의 댓글