능글맞은 구렁이
Spring-컨테이너종류, XML설정 본문
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"으로 지정할 수 있는데,이렇게 지정하면
스프링 컨테이너는 해당 속성이 요청될때마다 매번 새로운 객체를 생성하여 반환한다.
'Framework > Spring' 카테고리의 다른 글
Spring-polymorphism(결합성테스트) (0) | 2021.06.15 |
---|---|
Spring-사용방법, 프로젝트 생성시 주의 (0) | 2021.06.15 |
Spring-인텔리제이 프로젝트생성 (0) | 2021.06.13 |
Spring-프로젝트 구조 분석 (0) | 2021.06.13 |
Spring-개발을 위한 준비/javaConfiguration(설정2) (0) | 2021.06.12 |