Spring

[Spring] 스프링 빈

삶_ 2022. 7. 3. 22:37

 

 

스프링 빈 등록

  • @Bean, @Component 등이 붙여진 클래스들을 모두 호출해 스프링 컨테이너에 등록

 

 

@Component

  • 개발자가 직접 작성한 클래스를 빈으로 자동 등록하기 위한 어노테이션
  • 싱글톤 클래스 빈을 생성
  • @Component("경로") : 경로 = 설정한 클래스 빈의 이름

 

 

@ComponentScan

  • @Component, @Configuration 을 검색해 스프링 빈으로 자동 등록
  • 만약 등록되어있는 스프링 빈을 또 수동으로 만들면 수동으로 만든 것으로 덮어씌워짐.
    • 빈의 기본 이름 : MemberServiceImpl 클래스 -> memberServiceImpl
    • 빈 이름 직접 지정 : @Component("지정할 이름")
  •  스캔 대상
    • 아래 어노테이션이 붙은 클래스를 찾아 빈을 생성하고 ApplicationContext에 등록해줌
    • @Component : 컴포넌트 스캔에서 사용.
    • @Controller : 스프링 MVC 컨트롤러로 인식. 내부에 @Component 포함
    • @Service : 스프링 비즈니스 로직에서 사용, 특별한 처리를 하진 않음
    • @Repository : 스프링 데이터 접근 계층으로 인식, 데이터 계층 예외를 스프링 예외로 변환
    • @Configuration : 스프링 설정 정보로 인식, 스프링 빈이 싱글톤을 유지하도록 한다
  • 탐색할 페이지의 시작 위치 지정
    • @ComponentScan (basePackages = "hello.core"), 
      • basePackages : 지정한 클래스의 탐색할 패키지의 시작 위치를 지정함
      • basePackages = {"여러개","넣는법"}
      • 지정하지 않으면 @ComponentScan이 붙은 클래스의 패키지가 시작 위치가 됨

 

 

@Configuration

  • @Bean을 사용하는 클래스는 @Configuration 도 함께 사용되어야 함
  • 개발자가 직접 제어가 불가능한(수동으로 해야하는) 외부 라이브러리 등에 보통 사용함
    • 스프링은 CGLIB 라는 바이트코드를 조작하는 라이브러리를 사용해서 @Configuration 이 들어간 클래스를 상속받은 임의의 다른 클래스를 만들고, 그 클래스를 스프링 빈으로 등록함
    • 해당 클래스에서 1개 이상의 빈을 생성하고 있음을 명시함
  •  @Component의 한 종류