본문 바로가기
Spring

스프링 XML 설정

by Big Sun 2022. 7. 14.
728x90

<beans> 루트 엘리먼트

스프링 설정 파일에 <beans> 루트 태그는 반드시 사용해야하고, <beans> 루트 태그의 시작태그에 네임스페이스를 비롯한 xml 스키마 관련 정보가 설정된다.

<beans> 루트 태그는 아래의 자식 태그등을 사용할 수 있다.(2개만 다루도록 하겠습니다)

  • <import>
  • <bean>

 

<import>

이 태그는 설정파일들을 효율적으로 관리하기 위해 사용된다.

모든 설정 파일을 한 파일에 작성할 수 있지만, 그렇게 하면 스프링 설정 파일이 너무 길어지고 복잡하게 된다.

따라서, <import> 태그를 이용해 기능별로 여러 xml파일을 나눠서 사용하는 것이 바람직하다.

 

context-datasource.xml

<beans>
	DataSource 관련 설정
</beans>

context-transaction.xml

<beans>
	Transaction 관련 설정
</beans>

applicationContext.xml

<beans>
	<import resource = "context-datasource.xml" />
    	<import resource = "context-transaction.xml" />
</beans>

 

 

 

<bean>

스프링 컨테이너가 관리할 빈 객체를 생성하기위해 사용하는 태그이다.

 

속성 설명 디폴트
id bean에 대해 붙이는 식별자(고유함)  
name 별칭, 복수정의 가능 -
class bean의 클래스명, 완전 수식명으로 기술함  
singleton bean이 singleton으로서 관리될지 안 될지 여부 false
lazy-int bean이 지연 로딩을 행할지 안 할지 여부  false
init-method bean의 초기화 때에 실행시킬 메소드 -
destroy-method bean 컨테이너의 종료시에 실행시킬 메소드 -

 

lazy-init 속성 : applicationContext를 이용하면 컨테이너를 구동하면 컨테이너가 구동되는 시점에 스프링 설정 파일에 등록된 <bean>들을 생성하는 즉시 로딩 방식으로 동작한다. 그런데 어떤 <bean>들은 자주 사용하지 않으면서 시스템에 메모리를 많이 차지하여 부담을 주는 경우가 있다. 

이때 <bean>태그안에 lazy-init ="true"를 추가한다.

 

 

빈 객체 범위 : scope 속성

 

스프링은 기본적으로 하나의 빈 설정에 대해서 한 개의 빈 객체만을 생성한다.

설정 파일에서 <bean>태그의 scope속성을 이용하여 빈의 범위를 설정할 수 있다.

범위 설명
singleton 스프링 컨테이너에 한개의 빈 객체만 존재한다.
prototype 빈을 사용할 때마다 객체를 생성한다.

참고) request, session도 scope 속성에 포함된다. 이들은 WebApplicationContext에서만 적용 가능하다.

request - HTTP 요청마다 빈 객체를 생성한다.

session - HTTP 세션마다 빈 객체를 생성한다.

 

 

scope 속성 : singleton과 prototype의 차이

<bean id="tv" class ="sonny.spring.polymorphism.SamsungTV" init-method = "start" destroy-method = "stop" scope = "singleton"/>
AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
		TV tv =(TV) factory.getBean("tv");
		TV tv1 =(TV) factory.getBean("tv");
		TV tv2=(TV) factory.getBean("tv");
		factory.close();

 

==> tv 객체가 1개 생성된다.

<bean id="tv" class ="sonny.spring.polymorphism.SamsungTV" init-method = "start" destroy-method = "stop" scope = "prototype"/>

 

AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
		TV tv =(TV) factory.getBean("tv");
		TV tv1 =(TV) factory.getBean("tv");
		TV tv2=(TV) factory.getBean("tv");
		factory.close();

===> tv 객체가 3개 생성된다.  protoype은 요청이 이루어질 때마다 객체가 새로 생성된다.

 

 

 

 

 

 

 

 

728x90

'Spring' 카테고리의 다른 글

Spring - AOP  (0) 2022.07.19
의존성 관리 -2  (0) 2022.07.15
의존성 관리-1  (0) 2022.07.14
스프링 프레임 워크를 배우기 전 용어 정리  (0) 2022.07.08
웹 서버와 Web Application Server  (0) 2022.05.14