Bean 등록(@Component, @Configuration, @Bean)

devyumi·2023년 12월 4일
0

Spring

목록 보기
2/14

Bean

  • 스프링 IoC 컨테이너가 관리하는 객체를 뜻함


장점

  • 의존성 관리에 용이함

  • 기본적으로 싱글톤으로 등록됨

싱글톤

  • 객체를 하나만 등록한다는 뜻
  • 스프링 컨테이너는 Bean을 싱글톤으로 등록함으로써 Bean을 재사용하여 메모리를 절약함


Bean 등록

1. @Component

  • 스프링 컨테이너에 Bean을 자동으로 등록함

  • 하위 어노테이션으로는 @Configuration, @Controller, @RestController, @Service, @Repository 등이 있음

  • @ComponentScan을 사용하여 @Component가 부여된 클래스를 자동으로 Bean 등록함

  • 스프링은 @ComponentScan을 이용한 자동 Bean 등록 방식을 권장함



2. @Bean, @Configuration

  • 스프링 컨테이너에 Bean을 수동으로 등록함

언제 사용하는가?

  • 어플리케이션 전범위로 사용되는 클래스를 등록할 때
  • 개발자가 직접 제어 불가능한 외부 라이브러리를 Bean으로 등록할 때 사용함 (MultipartResolver, Docket 등)

어떻게 사용하는가?

  • 대게 ApplicationConfiguration.java 에 Bean을 설정함
  • @Configuration 으로 Bean 설정 파일임을 가시적으로 보여줌
@Configuration
public class ApplicationConfig {
	@Bean
    public MultipartResolver multipartResolver() {
       ...
    }
}

  • @Bean 만으로는 싱글톤을 보장할 수 없기 때문에 @Configuration과 함께 사용되어야 함

@Configuration과 싱글톤

  • @Configuration은 CGLIB로 프록시 패턴을 적용하여 수동으로 등록되는 스프링 Bean이 반드시 싱글톤으로 생성되도록 함

  • Bean을 싱글톤으로 생성하기 위해 CGLIB는 바이트 코드로 런타임 시 자바 클래스를 상속하여 동적 프록시 객체를 만듦

  • @Configuration(proxyBeanMethods = false)로 설정할 경우, 프록시가 적용되지 않아 Bean 메서드를 호출할 때 마다 새로운 객체를 생성함

  • 즉, 평소에는 싱글톤을 보장하기 위해 proxyBeanMethods = true가 디폴트 값임

0개의 댓글

관련 채용 정보