BoardWeb 프로젝트의 src/main/resources 소스 폴더를 선택하고 마우스 오른쪽 버튼을 클릭한다. 그리고 [new] ->
[other] 메뉴를 클릭하면 spring 폴더에 있는 Spring Bean Configuration File을 선택하고 <Next>를 클릭한다.
File name 은 applicationContext를 입력한다.
기본적으로 <beans> 루트 엘리먼트와 네임스페이스 관력 설정들이 추가되어 제공된다.
applicationContext 에 TV예제를 테스트하기 위해 SamsungTV 클래스를 스프링 설정파일에 등록한다.
<?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">
<bean id="tv" class= "polymorphism.SamsungTV"></bean>
</beans>
<bean> 엘리먼트에서 가장 중요한 것은 class 속성값이다. 여기에 패키지 경로가 포함된 전체 클래스 경로를 지정해야 한다.
TVUser.java
package polymorphism;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TVUser {
public static void main(String[] args) {
//1.Spring 컨테이너를 구동한다.
AbstractApplicationContext factory =
new GenericXmlApplicationContext("applicationContext.xml");
}
}
구동된 컨테이너로부터 SamsungTV 객체를 얻어본다.
package polymorphism;
public class SamsungTV implements TV {
public SamsungTV() {
System.out.println("===> SamsungTV) 객체 생성");
}
public void powerOn() {
System.out.println("SamsungTV---전원 켠다.");
}
public void volumeUp() {
System.out.println("SamsungTV---소리 올린다.");
}
public void volumeDown() {
System.out.println("SamsungTV---소리 내린다.");
}
public void powerOff() {
System.out.println("SamsungTV---전원 끈다");
}
}
스프링 컨테이너를 구동하고 이름이 tv인 객체를 getBean() 메소드를 이용하여 요청하도록 TVUser를 수정한다.
package polymorphism;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TVUser {
public static void main(String[] args) {
//1.Spring 컨테이너를 구동한다.
AbstractApplicationContext factory =
new GenericXmlApplicationContext("applicationContext.xml");
//2.Spring 컨테이너로부터 필요한 객체를 요청한다.
TV tv = (TV)factory.getBean("tv");
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
//3. Spring 컨테이너를 종료한다.
factory.close();
}
}
스프링 컨테이너 동작 순서
1. TVUser 클라이언트가 스프링 설정 파일을 로딩하여 컨테이너 구동
2. 스프링 설정 파일에 <bean> 등록된 SamsungTV 객체 생성
3. getBean() 메소드로 이름이 'tv'인 객체를 요청
4. SamsungTV객체 반환
스프링 컨테이너의 종류
스프링에서는 BeanFactory 와 이를 상속한 ApplicationContext 두가지 유형의 컨테이너를 제공한다.
BeanFactory는 스프링 설정 파일에 등록된 <bean> 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공한다. 그리고 컨테이너가 구동될 때 <bean>객체를 생성하는 것이 아니라, 클라이언트의 요청에 의해서만 <bean>객체가 생성되는 지연로딩 방식을 사용한다.
반면에 ApplicaionContext는 BeanFactory가 제공하는 <bean> 객체 관리 기능 외에도 트랜잭션 관리나 메시지 기반의 다국어 처리기능 등 다양한 기능을 지원한다. 또한 컨테이너가 구동되는 시점에 <bean>등록된 클래스들을 객체 생성하는 즉시 로딩(pre-loading)방식으로 동작한다. 그리고 웹 애플리케이션 개발도 지원한다.
구현 클래스 | 기능 |
GenericXmlApplicationContext | 파일 시스템이나 클래스 경로에 있는 xml 설정 파일을 로딩하여 구동하는 컨테이너이다 |
XmlWebApplicationContext | 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너이다. |
'spring_project' 카테고리의 다른 글
디자인패턴 이용하기 (Factory 패턴) (0) | 2021.09.11 |
---|---|
다형성 이용하기 (0) | 2021.09.11 |
서블릿 컨테이너의 서블릿 객체관리 (0) | 2021.09.09 |
자바 기반의 프레임워크 & 스프링 프레임워크 특징 (0) | 2021.09.09 |
1. [스프링] 프로젝트 세팅 (0) | 2021.09.08 |