ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 컨테이너
    SPRING 2021. 5. 21. 11:38

    개인 공부 후 정리 목적인 글입니다.

     

     

    스프링 컨테이너

     

    1. BeanFactory

    - 스프링 설정 파일에 등록된 <bean> 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공

    - 컨테이너가 구동될 때 <bean> 객체를 생성하는 것이 아니라, 클라이언트의 요청(Lookup)에 의해서만 <bean> 객체가 생성되는 지연 로딩(Lazy Loading) 방식을 사용한다. 

    결론적으로는 일반적인 스프링 프로젝트에서 BeanFactory를 사용할 일이 전혀 없다.

     

    2. ApplicationContext

    - BeanFactory가 제공하는 <bean> 객체 관리 기능 외에도 트랜잭션 관리나 메시지 기반의 다국어 처리 등 다양한 기능을 지원한다.

    - 컨테이너가 구동되는 시점에 <bean> 등록된 클래스들을 객체 생성하는 즉시 로딩(pre-loading) 방식으로 동작한다. 

    - 웹 애플리케이션 개발도 지원하므로 대부분 스프링 프로젝트는 ApplicationContext 유형의 컨테이너를 이용한다.

     

     

    ApplicationContext의 구현 클래스

     

    GenericXmlApplicationContext : 파일 시스템이나 클래스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너

    XmlWebApplicationContext : 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너

     

    GenericXmlApplicationContext는 직접 객체를 생성하여 구동하는 컨테이너

    XmlWebApplicationContext는 직접 생성하지 않는 컨테이너

     

     

    스프링 XML 

    1. <beans> 루트 엘리먼트

    스프링 컨테이너는 <bean> 저장소에 해당하는 XML 설정 파일을 참조하여 <bean>의 생명주기를 관리하고 여러 서비스를 제공한다.

    스프링 프로젝트 전체에서 가장 중요한 역할을 담당하며, 이 설정 파일을 정확하게 작성하고 관리하는 것이 중요

     

    2. <import> 엘리먼트

    분리하여 작성한 설정 파일들을 하나로 통합할 때 <import>엘리먼트를 사용한다.

    import 태그를 이용하여 여러 스프링 설정 파일을 포함함으로써 한 파일에 작성하는 것과 같은 효과를 낼 수 있다.

     

    3. <bean> 엘리먼트

    스프링 설정 파일에 클래스를 등록하려면 <bean> 엘리먼트를 사용한다. 이때 id 속성과 class 속성을 사용하는데 id 속성은 생략 가능, class 속성은 필수이다.

     

    <bean> 엘리먼트 속성

    (1) init-method 속성 : init() 메소드를 재정의하여 멤버변수를 초기화한다.

    init-method 속성으로 지정된 initMethod() 메소드를 호출한다. 이 메소드에서 멤버변수에 대한 초기화 작업을 처리한다.

     

    (2) destroy-method 속성 : 스프링 컨테이너가 객체를 삭제하기 직전에 호출될 임의의 메소드를 지정할 수 있다.

    destroy-method 속성으로 지정된 destroyMethod() 메소드는 객체가 삭제되기 직전에 호출된다.

     

    (3) lazy-init 속성 

    lazy-init="true"로 설정하면 스프링 컨테이너는 해당 <bean>을 미리 생성하지 않고 클라이언트가 요청하는 시점에 생성한다. => 메모리 관리를 더 효율적으로 할 수 있게 된다.

     

    (4) scope 속성

    scope 속성값은 기본이 싱글톤이다. 

    scope="singleton" 일 경우 => 해당 bean이 스프링 컨테이너에 의해 단 하나만 생성되어 운용되도록 한다.

    scope="prototype" 일 경우 => 해당 bean이 요청될 때마다 매번 새로운 객체를 생성하여 반환한다.

     

     

     

     

     

    'SPRING' 카테고리의 다른 글

    어드바이스 동작 시점  (0) 2021.05.25
    AOP 용어  (0) 2021.05.25
    어노테이션  (0) 2021.05.24
    의존성 주입  (2) 2021.05.21
    프레임워크  (0) 2021.05.20
Designed by Tistory.