Programming/Spring

[Spring] ApplicationContext, 스프링 컨테이너, 스프링 빈(Bean)

Supreme_YS 2022. 2. 6. 19:12

프로젝트를 제작하면서, 기존에 인X런에서 배웠던 내용들을 다시 리마인드하는 작업을 하고 있다. 이거 굉장히 좋은 학습 방법인 것 같다. 아주 착착 감긴다. 어떤 느낌이냐면, 흩어진 지식들을 연결하는 느낌이다. 하드 코딩으로 필요한 기능을 추추추추추추추가 하며 무슨 내용인지도 모르고 '그냥 기능만 잘 동작하면 되지' 라는 마인드로 개발을 진행했었다. 이 어노테이션(@)이 왜 쓰이고, 무엇 때문에 쓰이고 어느 부분에선 왜 이런 어노테이션이 쓰이는지 그 이유를 알 수 있는 공부 방법이라고 생각한다. 

 

그래서 뿔뿔이 흩어져있는 지식들을 연결하기 위한 정리들을 시작하는 중이다. 

 

그 첫 번째는 ApplicationContext이다. 스프링을 한 번이라도 접해봤다면 ApplicatioContext를 들어는 봤을 것이다. 이 부분이 어디에 나오냐면 본격적으로 기존 자바로 되어있는 코드를 본격적으로 스프링으로 리팩토링 하기 위해서 나오는 개념이다. 

 

ApplicationContext : 스프링 컨테이너이다. 기존에는 직접 객체를 생성하고 의존성을 주입했지만, 스프링 컨테이너를 통해서 객체를 생성하고 의존성을 주입한다.

스프링 컨테이너 적용 전 순수 자바 코드

 

스프링 컨테이너 적용 후 코드

@Configuration : 설정(구성) 정보로 사용하기 위한 스프링 컨테이너 어노테이션

@Bean : 스프링 컨테이너에 등록된 객체 = 스프링 빈, 메서드에 붙은 이름을 그대로 사용하지만 이름에 중복이 있으면 안되고 유일해야 한다.


* 스프링 컨테이너의 생성

// 스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

ApplicationContext는 아래의 사진과 같이 인터페이스다. 따라서,  new AnnotationConfigApplicationContext(AppConfig.class); 부분이 인터페이스의 구현체이다.

따라서, 이후에 스프링 컨테이너 즉, 스프링 빈 저장소에 @Bean 어노테이션을 붙인 모든 메서드가 등록이 된다. 다음 포스팅은 스프링 빈 조회 관련한 여러가지 테스트 코드를 작성해서 실제로 빈이 저장이 되는지 알아보자!