능글맞은 구렁이

Spring-컨테이너종류, XML설정 본문

Framework/Spring

Spring-컨테이너종류, XML설정

보라색츄르 2021. 6. 14. 09:41

1. 스프링 컨테이너의 종류

 

 

1-1. BeanFactory 

  1) <bean>객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공

  2) 클라이언트의 요청(Lookup)에 의해서만 <bean>객체가 생성되는 지연 로딩방(Lazy loading)식을 사용

   ∴ 일반적인 스프링 프로젝트에서 BeanFactory를 사용할 일은 전혀 없다.

 

1-2. ApplicationContext 

  1) BeanFactory를 상속 받음

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

     기능을 지원한다.

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

  4) ApplicationContext 에서 많이 사용하는 클래스

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

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

  ∴ 대부분 스프링 프로젝트는ApplicationContext 유형의 컨테이너를 이용한다.

 

   ※spring에서 bean이란?

      Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다.

      우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다.

      ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다.

      즉 Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다.

   ※spring에서 컨테이너란?

      스프링 프레임워크는 스프링의 빈을 생성하고 관리하는 컨테이너를 가지고 있다.

      이를 통해서 스프링의 주개념인 IOC 나 AOP에 대해서 관리하곤 한다

 

 


2. 스프링 XML설정

2-1. <beans>루트 엘리먼트

      스프링 설정 파일 이름은 무엇을 사용하든 상관없지만 <beans>를 루트 엘리먼트로 사용해야한다.

      그리고 <beans> 엘리먼트 시작 태그에 네임스페이스를 비롯한 XML스키마 관련 정보가 설정된다.

      <beans> 에는 <bean>, <description>, <alias>, <import>등 네 개의 엘리먼트를 자식 엘리먼트로 사용할 수 있다.

      이중에서도 <bean>, <import>를 많이 사용한다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans.xsd
		                    http://www.springframework.org/schema/context 
                            http://www.springframework.org/schema/context/spring-context-4.2.xsd
		                    http://www.springframework.org/schema/aop  
                            http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
</beans>

 

2-2. <baen>엘리먼트 속성

 

   1) init-method / destroy-method속성 :

      init-method : 스프링 설정 파일에 등록된 클래스를 객체 생성할 때 디폴트 생성자를

      호출한다. 따라서 객체를 생성한 후에 멤버변수 초기화 작업이 필요하다면, Servlet의 init()은 메소드가 필요한데     

     이때 스프링에서는 <bean> 엘리먼트에 init-method속성을 지원한다.

     destroy-method : init-method와 마찬가지로 <bean>엘리먼트에서 destroy-method속성을 이용하여 

     스프링 컨테이너가 객체를 삭제하기 직전에 호출될 임의이 메소드를 지정할 수 있다.

 <beans ~~~>
      <bean id="자바변수명형식" class="풀네임" init-method="메서드명" destroy-method="메서드명"></bean>
 </beans>

           ※init-method와 destroy-method의 실행순서※

             ㄱ) id :생성

             ㄴ) itit-method : 초기화직전(nit-method의 정확한 시점 -> 클래스를 이용하여 객체가 만들어지고 

                                              해당 객체가 getBean(0에 의해 반환되기 직전, 즉 초기화 직전에 실행)

             ㄷ) ~~실행내용

             ㄹ) destroy-method :소멸직전(확인방법: 해당객체를고나리하는 컨테이너를 자원해제)

             ㅁ) 소멸

 

   2) lazy-init속성

      자주사용하지 않는 bean속성에는  lazy-init 에 true값으로 설정하면서 스프링 컨테이너는 해당 빈을 미리 생성하지        않고 클라이언트가 요청하는 시점에서 생성한다. 결국, 메모리 관리를 더 효율적으로 할수 있게 된다.

      <bean id="tv" class="polymorphism.SamsungTV" lazy-init="true"></bean>

 

   3) scope속성

      scope속성값은 디폴트속성이 singleton이다. scope속성을 "prototype"으로 지정할 수 있는데,이렇게 지정하면

      스프링 컨테이너는 해당 속성이 요청될때마다 매번 새로운 객체를 생성하여 반환한다.

 

Comments