개념 | 스프링 컨테이너와 스프링 빈

728x90

🏓 스프링 컨테이너와 스프링 빈

  • @RestController 의 역할은 해당 객체를 API 진입 지점으로 만들어 줄 뿐 아니라, 해당 클래스를 스프링 빈으로도 등록시킨다.
  • @SpringBootApplication 을 최초에 실행 서버 위에 붙였다. 이 어노테이션은 다양한 설정들을 자동으로 해주는데 그 중 하나가 스프링 서버 내부에 거대한 컨테이너를 만드는 것!
  • **컨테이너 안에 들어가는 클래스를 ‘스프링 빈’**이라고 부른다.
  • 스프링 컨테이너빈으로 등록된 클래스가 필요로 하는 객체를 컨테이너 내부에서 찾아 인스턴스화를 진행해준다.

♦️서버 실행 시 순차 발생하는 일

  1. 컨테이너가 시작된다.
  2. 컨테이너에 많은 빈들이 ‘자동 등록 된다’
  3. 개발자가 수동 설정한 스프링 빈들도 등록된다.
  4. 필요한 의존성도 자동 설정된다.

♦️스프링 컨테이너 사용하는 이유

수정해야 할 코드가 줄어든다.

♦️스프링 컨테이너 다루는 방법

@Configuration : 설정 클래스 정도로 생각하자

@Bean: 빈 등록. 해당 메소드가 반환하는 객체를 스프링 빈으로 등록하는 어노테이션

  • 사용 예시
@Configuration
public class UserConfiguration{
	@Bean
	public UserRepository userRepository(JdbcTemplate jdbcTemplate){
		return new UserRepository(jdbcTemplate);
	}
	@Bean
	public UserService userService(UserRepository userRepository){
		return new UserService(userService);
	}
}

1) 일반적으로 개발자가 ‘직접’ 만든 클래스를 빈으로 등록 시

  • @Service, @Repository 를 사용한다.

2) 외부 라이브러리나 프레임워크에 만들어져있던 클래스를 빈으로 등록 시

  • @Configuration + @Bean 을 사용한다.

🟦 @Component 어노테이션

  • 이 어노테이션 붙인 클래스를 ‘컴포넌트’로 간주하고, 서버가 틀 때 자동 감지되게 함
  • 컨트롤러, 서비스, 리포지토리가 모두 아닌 추가 클래스를 빈으로 등록 시 종종 사용함

🟦 @Qualifier(”___”) 어노테이션

  • 주입 받는 쪽에서 특정 스프링 빈 선택할 수 있게 해줌
  • 스프링 사용하는 쪽, 등록하는 쪾 모두 사용 가능하다.
  • 우선순위는 @Primary 보다 높다.

🟧 스프링 빈 등록 방식 (3가지)

1) 생성자를 통해 주입받기 | 권장됨

2) setter() 를 통해 주입받기

  • @Autowired 붙여야 인식함

3) 필드로 직접 주입받기

  • @Autowired 붙여야 인식함
728x90