2022. 7. 14. 15:52ㆍSpring
<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은 요청이 이루어질 때마다 객체가 새로 생성된다.
'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 |