스프링 컨테이너

 

  • 스프링 프레임워크의 핵심 컴포넌트로, 내부에 존재하는 빈의 생명주기를 관리합니다.
  • 의존성 주입을 통해 애플리케이션의 컴포넌트를 관리합니다.
  • 서로 다른 빈을 연결해 애플리케이션의 빈을 연결하는 역할을 해줍니다.
  • 이로 인해, 개발자는 모듈 간의 의존/결합으로 인해 발생하는 문제로부터 자유로워집니다.

 

 

형태

ApplicationContext 를 스프링 컨테이너라고 하며, 인터페이스로 구현되어 있습니다.

 

 

생성 방법

XML, Annotation 기반 자바 설정 클래스로 만들수 있습니다.

예전에는 xml 을 통해 모두 설정해줬지만, 이러한 복잡한 부분들을 스프링부트를 사용하면서 거의 사용하지 않게 되었습니다.

 

 

 

스프링 컨테이너를 왜 사용할까?

 

  • 기존에는 객체를 사용하기 위해 무수히 많은 [ new 생성자 ] 를 써야했습니다.
  • 이러한 객체의 의존성을 낮추기 위해 스프링 컨테이너를 사용합니다.

 

스프링 컨테이너만으로 이 문제를 어떻게 해결할 수 있을까?

 

  • 기존의 방식은 새로운 수정사항이 있을 때 변경사항을 전부 수작업으로 수정해줬어야 했습니다.
  • 이러한 방식은 대규모 프로젝트가 될 수록 문제가 되었습니다.
  • 스프링 컨테이너를 통해 구현 클래스에 의존성을 제고하고, 인터페이스에만 의존하도록 설계하였습니다.

 

 

스프링 컨테이너 설정 과정

 

  • 스프링 컨테이너는 Configuration Metadata 를 사용합니다.
  • 스프링 컨테이너는 피라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록합니다.
  • new AnnotationConfigurationContext( 구성정보.class ) 로 스프링에 있는 @Bean 메서드를 등록 해줍니다.
  • 즉, 애너테이션 기반의 자바 설정 클래스로  Spring 을 만듭니다.

 

ApplicationContext

스프링 컨테이너를 만드는 다양한 방법들은 ApplicationContext 의 구현체입니다.

 

ApplicationContext Interface 구현체 확인 방법

Mac :
1) cmd + O
2) Class 에서 ApplicationContext 검색

Window :
1) ctrl + N
2) Class 에서 ApplicationContext 검색

 

 

 

Spring Container 의 종류

 

  • BeanFactory

1) 스프링 컨테이너의 최상위 인터페이스

2) 빈을 등록, 생성, 조회, 돌려주는 등 빈의 관리를 하는 역할

3) getBean() 메소드를 통해 빈을 인스턴스화 할 수 있음

4) @Bean 이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록 할 수 있음

 

 

  • ApplicationContext

1) BeanFactory 기능을 상속받아 제공

2) BeanFactory 의 모든 기능을 다 사용 가능하며, 그 외 부가기능도 제공

 

* 부가기능

- MessageSource : 메세지 다국화 인터페이스

- EnvironmentCapable : 개발서버, 운영서버 등 환경변수 등으로 나눠처리하는 애플리케이션 구동 정보를 관리하는 인터페이스

- ApplicationEventPublisher : 이벤트 관련 기능을 제공하는 인터페이스

- ResourceLoader : 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회

 

 

Bean 이란?

스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트입니다.

 

  • 빈은 인스턴스 객체를 의미합니다.
  • 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 합니다.
  • @Bean 이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록합니다.
  • 빈은 클래스의 등록정보, 게터/세터 메서드를 포함합니다.

 

 

Bean 접근방법

ApplicationContext 사용하여 bean 정의를 읽고 액세스 할 수 있습니다.\

ApplicationContext ac = new ApplicationContext("appConfig.class");
MemberServcie ms = ac.getBean("memberService",MemberService.class); // 빈을 불러옴

'스터디' 카테고리의 다른 글

서블릿  (1) 2022.11.22
빈 스코프  (0) 2022.08.11
UML 작성법  (0) 2022.08.10
AOP - 관점 지향 프로그래밍  (0) 2022.08.09
IoC / DI  (0) 2022.08.09

+ Recent posts