관리 메뉴

Rootable의 개발일기

스프링 빈 등록 방법 본문

Spring

스프링 빈 등록 방법

dev-rootable 2023. 4. 27. 21:23

📌 Component Scan

 

스프링은 @Component 라는 애노테이션이 붙은 객체를 애플리케이션이 실행하는 시점에 스캔한다. 이 때, 스캔된 객체는

스프링 컨테이너에서 스프링 빈으로서 관리되어 스프링이 필요한 시점에 객체를 생성하고 관계를 맺도록 해준다.

 

@Component 라는 애노테이션을 상속받은 애노테이션은 대표적으로 @Controller, @Service, @Repository 등이 있다.

 

📌 자바 코드로 스프링 빈 직접 등록

별도 설정 클래스를 생성하여 @Configuration 애노테이션을 달아준다. 해당 애노테이션을 달게 되면 스프링에 이 파일이 설정 파일이고 빈을 등록하기 위한 파일이라는 것을 알려줄 수 있다.

 

DI 컨테이너(스프링 컨테이너)는 @Configuration으로 등록된 설정정보 파일에서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 DI 컨테이너에 등록한다.
이렇게 DI 컨테이너에 등록된 객체를 스프링 빈이라 한다.

 

 - @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다. (앞 대문자는 소문자로 변경)

 - 기존에는 설정 파일을 new 하여 생성한 후 직접 메서드를 호출하여 사용해야 했음

 

📢 ApplicationContext(interface) == DI 컨테이너

구현체 : AnnotationConfigApplicationContext
ApplicationContext.getBean(빈 이름, 타입) 또는 ApplicationContext.getBean(타입) //스프링 빈 조회 후 get

 

또한, 스프링 컨테이너에 등록된 Bean 이 싱글톤(Singleton) 이 되도록 보장해준다. 따라서, 한번 생성된 객체는 여러 번 생성되지 않아 GC 에 부담을 덜어준다.
그리고 스프링 빈으로 등록된다는 것은 스프링 컨테이너가 관리하는 객체가 된다는 것을 의미한다.

 

@Bean 애노테이션은 스프링 컨테이너에 등록하려는 객체에 달아줄 수 있다. 하지만 해당 애노테이션만 달게 되면 등록은 되지만 싱글톤을 보장하진 않는다.

 

@Configuration 이 붙은 객체를 출력하면 "CGLIB" 라는 문자가 붙은 것을 볼 수 있다.

 

CGLIB 란?

CGLIB 는 사용자가 만든 클래스가 아니라 스프링에서 바이트 코드 조작 라이브러리를 사용하여 @Configuration 이 붙은 클래스를 상속 받은 임의의 클래스를 말한다.
이런 방식으로 스프링은 new 할 때마다 인스턴스를 만들지 않고, 한 번 생성한 인스턴스를 계속 해서 사용하여 싱글톤을 보장하는 것이다.

 

실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.

 

Reference:

https://castleone.tistory.com/2

 

[Spring] @Configuration 개념과 장점

더보기 1. @Configuration 이란? : @Configuration이라고 하면 설정파일을 만들기 위한 애노테이션 or Bean을 등록하기 위한 애노테이션이다. 더보기 2. @Configuration을 사용하면 뭐가 좋은데? : @Configuration 애

castleone.tistory.com

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

'Spring' 카테고리의 다른 글

Spring Boot  (0) 2023.05.01
스프링 데이터 접근 기술  (0) 2023.04.28
Dependency Injection(DI)과 IoC(Inversion of Control)  (0) 2023.04.27
Spring Test 관련 정리  (0) 2023.04.27
@RequestBody와 @ResponseBody  (0) 2023.04.27