Domain/Spring

[Spring] Bean ( Spring Bean )

by Donghwan 2021. 7. 23.

Bean

Spring에서는 Container를 이용해 객체들을 관리합니다. 이때 Container가 관리하는 자바 객체를 Bean이라고 부릅니다. 흔히 알고 있는 new를 통해 생성된 객체는 Bean이라고 할 수 없습니다. Bean은 getBean()을 통해 얻어질 수 있는 것을 Bean이라고 합니다. Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미합니다. Spring에서 Bean을 등록하는 방법은 ComponentScan 방법과, Configuration에서 직접 등록하는 방법이 존재합니다. 스프링은 기본적으로 모든 Bean을 Singleton으로 생성하여 관리합니다. Bean은 다양한 Scope를 가질 수 있습니다.

Bean Scope 범위

ComponentScan

ComponentScan 방식은 @Component 어노테이션이 존재하는 클래스를 스캔하여 Bean으로 등록하는 방법입니다. @Controller(@RestController)와 @Service, @Repository는 @Component 어노테이션을 바탕으로 다른 어노테이션과 결합되어 만들어진 어노테이션이기 때문에 이 어노테이션이 붙은 클래스도 모두 Bean으로 등록됩니다.

@Component
public class SampleComponent { ... }

@Controller
public class SampleController { ... }

@RestController
public class SampleRestController { ... }

@Service
public class SampleService { ... }

@Repository
public class SampleRepository { ... }

 

Configuration

@Configuration 어노테이션을 보면 이 어노테이션도 내부적으로 @Component를 사용하기 때문에 @ComponentScan의 검색 대상이 되고, 그에 따라 @Configuration 붙은 클래스가 읽힐 때 내부에 정의한 Bean들이 등록됩니다.

@Configuration
public class SampleConfiguration {
    @Bean
    public Sample sample() {
        return new Sample();
    }
}

출처

728x90
반응형

댓글