[Spring] Bean, IoC Container

fortice·2021년 1월 8일
0

Spring

목록 보기
2/13
post-thumbnail

IoC 컨테이너

토비의 스프링 설명

  • 스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당한다. 이를 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. 그래서 스프링 컨테이너를 IoC 컨테이너라고도한다.
  • 스프링 컨테이너는 단순한 DI 작업 보다 더 많은 일을 한다. DI를 위한 빈 팩토리에 엔터프라이즈 애플리케이션을 개발하는 데 필요한 여러 가지 컨테이너 기능을 추가한 것을 애플리케이션 컨텍스트라고 부른다.
  • 스프링의 빈 팩토리와 애플리케이션 컨텍스트는 각각 기능을 대표하는 BeanFactoryApplicationContext라는 두 개의 인터페이스로 정의되어 있다. ApplicationContext 인터페이스는 BeanFactory 인터페이스를 상속한 서브인터페이스다.
  • 실제로 스프링 컨테이너 또는 IoC 컨테이너라고 말하는 것은 바로 이 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트다.

IoC 컨테이너는 스프링에서 개발자 대신 Bean을 생성하고 관리하는데, 이 때 Bean에 해당되는 객체를 등록해야한다.

IoC 컨테이너Bean에 대해 좀더 알아보자.

IoC 컨테이너를 위해 필요한 두가지가 있다.

  1. POJO(Plain Old Java Object) 클래스(추후에 정리)

토비의 스프링 설명

객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트

  1. 설정 메타 정보

설정메타 정보

  • IoC 컨테이너가 POJO 클래스를 제어할 수 있도록 적절한 메타 정보를 제공해야한다.
  • 스프링에서 이 메타정보는 [BeanDefinition 인터페이스] (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/BeanDefinition.html)로 표현된다.
  • POJO를 따르는 클래스를 @Bean 어노테이션으로 스프링에 알려주면 BeanDefinition을 따르는 형태로 바꾸어 컨테이너에 저장하는 것이다.
  • 이 형태로 바꾸어주는 것이 BeanDefinitionReader 인터페이스 이다.

BeanDefinition 메타 정보

  • 빈아이디, 이름, 별칭 : 빈오브젝트를 구분 할 수 있는 식별자
  • 클래스 또는 클래스 이름 : 빈으로 만들 POJO 클래스 또는 서비스 클래스 정보
  • 스코프 : 싱글톤, 프로토타입과 같은 빈의 생성 방식과 존재 범위
    프로퍼티 값 또는 참조 : DI에 사용할 프로퍼티 이름과 값 또는 참조하는 빈의 이름
  • 생성자 파라미터 값 또는 참조 : DI에 사용할 생성자 파라미터 이름과 값 또는 참조할 빈의 이름
  • 지연된 로딩 여부, 우선 빈 여부, 자동와이어링 여부, 부모 빈 정보, 빈팩토리 이름 등

간단한 예시로 빈을 불러 올 때 위 정보를 사용하는데, 아래의 userDao는 빈 아이디, UserDao.class는 클래스이다.

context.getBean("userDao", UserDao.class)


profile
서버 공부합니다.

관심 있을 만한 포스트

0개의 댓글