개발/java

[Spring 기본] 3. Spring 프레임워크 사용하기

ebang 2023. 12. 21. 23:06
반응형

1. 스프링 컨테이너

  • ApplicationContext = 스프링 컨테이너
  •  

  • @Configuration annotation이 붙은 AppConfig 를 구성정보로 사용한다.
    • AppConfig 에서 @Bean 어노테이션이 뭍은 메소드를 모두

호출해서 반환된 객체를 스프링 컨테이너에 등록한다B. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.

  • 따라서 AppConfig 에서 객체를 찾아오는 대신, 스프링 컨테이너에서 필요한 스프링 빈(객체)를 찾아야 한다.


AppConfig에서 MemberService 의 구현체를 반환하는 메소드

 


applicationContext.getBean(<메소드 이름>, 반환받을 클래스 타입) 함수로 스프링을 받아온다.

2. 스프링 컨테이너 생성

  • 스프링 컨테이너가 생성되는 과정
  1. ApplicationContext 는 스프링 컨테이너이다.
  • 그리고 ApplicationContext 는 인터페이스이다.
  • 즉, 다형성이 적용된 객체이다.
  • 어노테이션 기반의 자바 설정 클래스로 만들기
    • 구현체
  • BeanFactory 와 ApplicationContext
    • BeanFactory
      • 스프링 컨테이너의 최상위 인터페이스
      • 스프링 빈을 관리하고 조회하는 역할.
      • ApplicationContext 는 이 BeanFactory를 상속받아서 구한 구현체이다.
    • ApplicationContext
      • BeanFactory의 기능을 모두 상속받았다.
      • 애플리케이션 개발을 위한 부가 기능이 추가 됨.
      • 부가 기능
        • 메시지 소스를 활용한 국제화 기능 (한국에서 들어오면 한국어로, 영어권이면 영어로 출력)
        • 환경변수 (로컬, 개발, 운영 등을 구분해서 처리)
        • 애플리케이션 이벤트 (이벤트를 발행하고 구독하는 모델)
        • 편리한 리소스 조회 (파일, 클래스 패스, 외부에서 리소스를 편리하게 조회)

2 . 만드는 방법

  • XML 기반으로 만들기
    • GenericXmlApplicationContext 구현체 사용
  •  

3. 스프링 컨테이너 생성 과정

  1. 구성 정보를 지정해준다.
  2. 스프링 컨테이너가 구성 정보를 참고해서 스프링 빈 저장소에 스프링 빈을 등록한다.
    • 빈 이름 - 빈 객체의 키-값 쌍을 생성한다. (빈 이름: 메소드 이름으로 등록)
      • 빈 이름은 별도로 지정할 수도 있다. @Bean(name=“hello”)
    • 빈 이름
      • 빈 이름은 메서드 이름을 사용한다.
      • 빈 이름을 직접 부여할 수 있다.
      • 빈 이름은 서로 달라야 한다.
  3. 스프링 빈 의존 관계 설정 - 준비
  4. 스프링 빈 의존 관계 설정 - 완료
    • 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입한다. (DI)
      • 동적인 객체 인스턴스 의존관계를 모두 연결.
    • 싱글톤 컨테이너 개념

4. 스프링 빈 조회하기

  1. 테스트 코드 작성하기
    1. getDefinitionNames()로 모든 빈의 이름 가져온 후, getBean으로 빈 가져오기
    1. getBeanDefinition(definitionName) 으로 definition 가져온 후, getRole()로 구분하기
  2. 스프링 컨테이너에서 빈 조회하기
  3. 기본
    • 메소드 이름, 객체 타입으로 조회
    • 객체 타입으로만 조회
      • 같은 타입이 여러 개라면 오류 발생. (NoUniqueBeanDefinitionException)
      • 한 타입에 대해 여러 빈들을 한번에 조회 가능
      • 구체 타입으로도 조회 가능
    • 상속관계의 스프링 빈 조회
      • 부모 타입으로 조회하면, 자손 타입도 모두 조회된다.
      • 그래서 모든 객체들의 부모인 Object 객체를 조회하면, 모든 스프링 빈을 조회한다.

5. 스프링 빈 메타데이터

  • 스프링 컨테이너는 스프링 빈 메타데이터를 참고한다.
  • 따라서 GenericXmlConfigApplicationContext 라서 xml을 봐야하든AnnotationConfigApplicationContext 라서 java code를 봐야하든 상관없이 추상화된 인터페이스에 의존한다: BeanDefinition, 스프링 빈 설정 메타데이터 라고 부른다.
    • @Bean, <bean> 하나당 한개씩 메타데이터가 생성된다.
  • 스프링 빈 메타데이터 리더가 xml 혹은 annotation 여부에 따라 맞게 파일을 읽어서 빈 메타데이터를 생성한다.
  • how?
  • ApplicationContext 구현체가 각각에 맞는 DefinitionReader를 갖고 있다. 그리고 그에 맞는 AppConfig 정보를 읽어서 BeanDefinition을 생성한다.
  • 빈을 등록하는 방법
    • xml 을 이용하는 방법은 직접 설정
    • AppConfig (@Configuration) 을 이용하는 방법은 팩토리 메소드 사용.
      • 외부에서 함수를 호출하기 때문.
  •  
반응형