[Spring] bean, IoC 컨테이너란.

SaGo_MunGcci·2022년 7월 27일
0

스프링

목록 보기
2/31

Definition

참고 DI와 제어의 역전 : https://velog.io/@sago_mungcci/DI%EC%99%80-%EC%A0%9C%EC%96%B4%EC%9D%98-%EC%97%AD%EC%A0%84%EC%9D%B4%EB%9E%80

  • 빈 (Bean): 스프링이 관리하는 객체
  • 스프링 IoC 컨테이너: '빈'을 모아둔 통


Mechanism

  • DI 를 사용하기 위해서는 객체 생성이 우선 되어야 했다. 과연 어디서 객체 생성을 해야 할까? 바로 스프링 프레임워크가 필요한 객체를 생성하여 관리하는 역할을 대신해 준다.

  • 즉 Bean은 의존성 주입을 실행하는 프레임워크가 의존성 주입에 해당하는 객체를 지정하는 것이고 이 지정한 bean을 ioc컨테이너에 넣어서 필요할때 객체를 만들어서 실행시켜준다.

  • 따라서 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙으면 bean을 주입해서 ioc컨테이너에 넣고 스프링이 실행될때 ioc컨테이너에 등록된 bean을 조회해서 의존성 주입을 해주는 것이다.


스프링 빈과 ioc컨테이너 예시

출처 : https://velog.io/@syleemk/Spring-Core-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88

스프링 빈 등록 방식

  • Component Scan
    컴포넌트 스캔은 @Component를 명시하여 빈을 추가하는 방법이다. 클래스 위에 @Component를 붙이면 스프링이 알아서 스프링 컨테이너에 빈을 등록한다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
}
  • 참고로 @Component는 위와 같이 ElementType.TYPE 설정이 있으므로 Class 혹은 Interface에만 붙일 수 있다.

  • 컴포넌트 스캔의 대상

  • @Component 외에 @Controller, @Service, @Repository, @Configuration는 @Component의 상속을 받고 있으므로 모두 컴포넌트 스캔의 대상이다.

  • @Controller
    스프링 MVC 컨트롤러로 인식된다.

  • @Repository
    스프링 데이터 접근 계층으로 인식하고 해당 계층에서 발생하는 예외는 모두 DataAccessException으로 변환한다.

  • @Service
    특별한 처리는 하지 않으나, 개발자들이 핵심 비즈니스 계층을 인식하는데 도움을 준다.

  • @Configuration
    스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다. (물론 스프링 빈 스코프가 싱글톤이 아니라면 추가 처리를 하지 않음.)

출처 : https://steady-coding.tistory.com/594



Retrospection



profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글