2020. 7. 23. 20:13ㆍSpring/Spring
1. 스프링 컨테이너
1) 설정 파일 생성 및 등록
/src/main/java/
applicationContext.xml
2) 스프링 컨테이너 구동 및 테스트
TV 브랜드를 변경할 때에는 applicationContext.xml 파일만 수정하면 클라이언트 소스 수정 없이 변경할 수 있다.
/src/main/java/
SamsungTV.java, TVUser.java
2. 스프링 컨테이너 종류
스프링에서는 BeanFactory와 이를 상속한 ApplicationContext를 제공한다. BeanFactory는 클라이언트의 요청에 의해서만 <bean>객체를 생성하고 관리하는 기본적인 컨테이너 기능을 제공한다.
ApplicationContext의 경우 BeanFactory의 기본적인 기능 외에도 트랜잭션, 메시지 기반 다국어 처리, 등 다양한 기능을 지원한다. 또한 BeanFactory와 다르게 컨테이너가 구동되는 시점에 <bean> 객체를 생성하는 즉시 로딩한다.
가장 많이 사용하는 ApplicationContext 구현 클래스는 두 가지가 있다. 하나는 GenericXmlApplicationContext 클래스로 파일 시스템이나 클래스 경로에 있는 xml 설정 파일을 로딩하여 구동하는 컨테이너이고, 다른 하나는 XmlWebApplicationContext 클래스로 웹 기반의 스프링 애플리케이션 개발에 사용하는 컨테이너이다.
3. 엘리먼트
1) <beans> 엘리먼트
스프링 컨테이너는 <bean> 저장소에 해당하는 xml 설정 파일(applicationContext.xml)을 참조해서 <bean>의 생명 주기를 관리하고 여러 가지 서비스를 제공한다. 설정 파일은 <beans> 태그로 시작하고 시작 태그에 xml 스키마 정보가 설정된다. spring-beans.xsd 스키마 문서가 schemaLocation으로 등록되어 <bean>, <description>, <import> 엘리먼트를 사용할 수 있다.
2) <import> 엘리먼트
<bean> 등록 외의 다른 기능(트랜잭션, 다국어 처리)을 하나의 파일에 모두 처리하기에는 편하지 않으므로 각 기능별 여러 xml 파일로 나누어 설정한다. 각 기능별로 xml을 분리하고 하나로 통합할 때 <import> 엘리먼트를 사용한다.
<beans>
<import resource="context-datasource.xml"/>
<import resource="context-transaction.xml"/>
</beans>
3) <bean> 엘리먼트
<bean> 엘리먼트를 사용할 때에는 id와 class 속성을 정의하는데, id 속성에는 객체를 위한 이름을 지정하고 class 속성에는 패키지와 클래스명을 지정한다. 그 외의 속성으로는 id와 동일한 기능을 수행하는 name 속성이 존재한다. 일반적으로 name보다는 id 속성을 더 선호하는 편이다.
1. init-mehtod 속성
스프링 설정 파일에 등록된 클래스를 객체 생성할 때 디폴트 생성자를 호출할 수 있다. 객체 생성 후 초기화 작업이 필요할 경우 init-method 속성을 사용한다.
/src/main/java/
applicationContext.xml, SamsungTV.java
2. destroy-method 속성
스프링 컨테이너가 객체를 삭제하기 직전에 호출될 메소드를 지정할 수 있다.
/src/main/java/
applicationContext.xml, SamsungTV.java
3. lazy-init 속성
ApplicationContext를 통해 컨테이너 구동 시점에 등록된 <bean>들을 생성하는 즉시 로딩하는 방식이 아닌<bean>이 사용되는 시점에 객체를 생성하도록 한다. 주로 자주 사용하지 않거나 메모리를 많이 차지하는 경우 사용한다.
/src/main/java/
applicationContext.xml
※ BeanFactory는 <bean>이 사용되는 시점에 객체를 생성하고 ApplicationContext는 컨테이너 구동 후 객체를 생성하는 즉시 로딩하는 방식이다.
4. scope 속성
생성된 수많은 객체들 중, 하나만 생성이 되어도 상관없는 객체가 존재한다. 예를 들어 SamsungTV의 정해져있는 가격의 경우, 이 가격을 확인하기 위해 중복된 객체가 생성이 되는 경우가 있다. 이 때, 디자인 패턴인 싱글톤 패턴을 사용하면 중복된 객체를 생성하지 않아도 된다. 스프링에서는 싱글톤 패턴을 적용해주는 컨테이너를 제공해주고 생성한 bean을 어느 범위에서 사용할 수 있는지 지정할 수 있다.
scope의 디폴트 값은 싱글톤이기에 생략하는 경우가 많고, <bean> 요청마다 새로운 객체를 생성하여 반환할 때에는 prototype으로 설정한다.
/src/main/java/
applicationContext.xml, SamsungTV.java
[참고] 스프링 퀵 스타트
'Spring > Spring' 카테고리의 다른 글
[Spring] 컬렉션 객체 설정 (0) | 2020.07.24 |
---|---|
[Spring] 의존성 관리 (0) | 2020.07.23 |
[Spring] 스프링 시작하기 (2) (0) | 2020.07.23 |
[Spring] 스프링 시작하기 (1) (0) | 2020.07.23 |