[인프런 워밍업 클럽 스터디] 6일차 - 스프링 컨테이너의 의미와 사용 방법

image

[정리] Section 3. 역할의 분리와 스프링 컨테이너

  1. 좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller 코드를 보다 좋은 코드로 리팩토링 한다.

  2. 스프링 컨테이너와 스프링 빈이 무엇인지 이해한다.

  3. 스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다.

  4. 스프링 빈을 다루는 여러 방법을 이해한다.

     


 

클래스 : 객체를 정의해놓은 설계도. 객체를 생성하기 위해 사용된다.

객체 : 클래스에 정의된 내용이 인스턴스화되어 실제로 생성된 것. 설계도를 통해 만들어진 집.

인스턴스(화) : 클래스를 실제로 사용할 수 있도록 생성하는 것.

 

스프링 빈 (UserController에 @RestController를 붙여줌으로써 스프링 빈이 됨)

  • 서버가 시작되면 스프링 서버 내부에 거대한 컨테이너(클래스 저장소)를 만든다.

  • 컨테이너 안에는 클래스가 들어간다.

  • 이 때 다양한 정보도 함께 들어있고, 인스턴스화도 이루어진다.

  • 이때 스프링 컨테이너 안으로 들어간 클래스를 스프링 빈이라고 한다.

  • JdbcTemplate도 스프링 빈으로 등록되어 있다. (Dependency가 등록해 주고 있음)

  • 스프링 컨테이너는 필요한 클래스를 연결해준다.

     

 

서버가 시작되면 일어나는 일

  1. 스프링 컨테이너(클래스 저장소)가 시작된다.

  2. 기본적으로 많은 스프링 빈들이 등록된다.

  3. 우리가 설정해 준 스프링 빈이 등록된다.

  4. 이 때 필요한 의존성이 자동으로 설정된다.

 

스프링 빈을 등록하는 방법

@Configuration

  • 클래스에 붙이는 어노테이션

  • @Bean을 사용할 때 함께 사용해야 한다.

     

     

    @Bean

  • 메소드에 붙이는 어노테이션

  • 메소드에서 반환되는 객체를 스프링 빈에 등록한다.

     

@Service - @Repository 사용할 때

  • 개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때

     

     

    @Configuration - @Bean 사용할 때

  • 외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때

알아볼 어노테이션

@Component

  • 주어진 클래스를 '컴포넌트'로 간주한다. 이 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.

@Qualifier

  • 스프링 빈에 이름을 지정함으로써 특정 클래스를 가져옴

 

스프링 빈을 가져오는 방법

  1. (가장 권장) 생성자를 이용해 주입받는 방식 : @Autowired 생략 가능

  2. setter와 @Autowired 사용 : 누군가 setter를 사용하면 오작동 할 수 있다.

  3. 필드에 직접 @Autowired 사용 : 테스트를 어렵게 만드는 요인이다.

 

 

 

참고자료 : https://mihee0703.tistory.com/182

 

댓글을 작성해보세요.