[Spring] 스프링 빈 설정

gnoesnooj·2021년 12월 2일
0

Spring bean ??

: 스프링 빈이란 스프링 컨테이너가 관리하고 있는 객체이다. 단지 new 를 통해서 생성한 객체는 스프링 빈이라고 할 수 없고, xml, annotation 등을 통해 ApplicationContextgetBean() 을 통해서 가져올 수 있다면 그것이 바로 스프링 빈이다.

1. (문제점) 순수한 자바 코드만 사용했을 때

  • 중복 되는 코드가 너무 많음
  • 의존하게 되는 객체가 매우 많아짐
  • 의존하는 객체 변경 시 유지보수가 너무 어려움
    -> 대신 주입해 줄 존재 필요 !

2. AppConfig (어노테이션 기반 스프링 컨테이너)

  • 기존 구체화, 추상화 두 개 모두 의존하던 코드를 추상화에만 의존하도록 하여 인터페이스만 알게 해서 유지보수와 객체지향적 프로그래밍이 더욱 잘 지켜지게 되었음
  • 의존하는 객체 변경 시 AppConfig 만 변경해주면 됨.
  • 각 의존하는 객체에 @Bean 을 붙여서 스프링 컨테이너가 Component Scan 을 통해서 스프링 빈으로 등록할 수 있도록 함.
  • ApplicationContext (=Spring Container) 의 객체를 통해서 등록된 스프링 빈에게 접근할 수 있다.

(+) ApplicationContext, BeanFactory

: BeanFactory는 스프링 컨테이너 중 최상위 인터페이스 이다.
: 스프링 빈을 관리하고 조회가 가능하며, getBean() 메소드를 제공한다.
: ApplicationContext 는 BeanFactory 를 상속 받고 있고, 그 외에 부가적인 기능들을 더 가지고 있다. (ex. 환경 변수 처리, 편리한 리소스 조회, 어플리케이션 이벤트 지원 등)

3. XML

  • Xml 에 각 정보를 mapping 해준다
  • 규모가 커지면 XML을 관리하기가 어려워 진다.
  • 최근 잘 사용하지 않는 추세이다.

스프링 컨테이너가 빈 관련해서 다양한 설정 형식을 제공할 수 있는 이유 ?

-> BeanDefinition 이라는 추상화를 통해서 설정하기 때문이다.
-> 여기서도 역할과 구현, 추상화와 구체화를 나누는 것이 적용된다.
-> 스프링 컨테이너는 BeanDefinition 만 알고 있으면, xml 이 되었든 자바 코드가 되었든 어떠한 설정 방법이든 상관 없이 빈을 등록하여 사용, 관리할 수 있다.
-> xml, 자바 코드, 어노테이션 모두 각각의 Reader 를 통해서 객체 정보가 담긴BeanDefinition을 만들어내기 때문에 스프링은 모든 설정 형식에 대한 지원이 가능하다.


직접 사용하는 경우는 흔치 않다고 하지만, 그래도 도움이 되는 내용이니 숙지하고 넘어가자.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글