1. 클래스 생성
먼저 아래와 같이 bean으로 등록할 클래스를 선언하자.
package Exam1;
public class SamTV implements TV{
public SamTV() {
System.out.println("Create SamTV Object");
}
@Override
public void turnOn() {
System.out.println("Turn on SamTV");
}
@Override
public void turnOff() {
System.out.println("Turn off SamTV");
}
@Override
public void volumeUp() {
System.out.println("Volume up SamTV");
}
@Override
public void volumeDown() {
System.out.println("Volume down SamTV");
}
}
2. bean 등록
먼저 applicationContext.xml 파일을 아래와 같이 만들어주자.
그리고 아래와 같이 코드를 수정해주자. (bean 태그만 추가된 것이다.)
<?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="Exam1.SamTV"></bean>
</beans>
3. 스프링 컨테이너 구동
컨테이너를 구동하기 위해서는 아래와 같이 코드를 작성하면 된다.
package Exam1;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TVMain {
public static void main(String[] args) {
// 스프링 컨테이너 구동
AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
// 객체 요청
TV tv = (TV)factory.getBean("tv");
tv.turnOn();
tv.volumeUp();
tv.volumeDown();
tv.turnOff();
// 컨테이너 종료
factory.close();
}
}
위 코드는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너 중 하나인 GenericXmlApplicationContext를 구동한 것이다. 콘솔 메시지를 살펴보면 아래와 같다.
먼저 applicationContext.xml 파일을 로딩하고 GenericXmlApplicationContext 객체가 생성되어 스프링 컨테이너가 구동된다. 이후 "getBean()"을 통해 우리가 설정한 bean class를 받아온다. 그러면 아래와 같은 결과를 확인할 수 있다.
참고) 컨테이너란?
servlet 파일을 생성하면 우리가 서블릿 클래스의 객체를 생성하지 않아도 해당 클래스에 해당하는 get 요청을 보냈을 때 클래스의 객체가 알아서 생성되고 실행된다. 서블릿 컨테이너는 이와 같이 web.xml 파일에서 설정된 객체를 알아서 생성하고 실행해준다. 즉, 컨테이너는 자신이 관리할 클래스들이 등록된 XML 설정 파일을 로딩하여 구동한다. 그리고 클라이언트의 요청이 들어오면 XML 파일을 참조하여 객체를 생성하고 객체의 생명주기를 관리한다.
스프링 컨테이너도 마찬가지다. 우리가 만든 클래스를 자동으로 생성할 친구가 필요하고 이 역할을 하는 것이 스프링 컨테이너다. 이때 서블릿 컨테이너가 관리하는 모든 객체의 정보는 web.xml에 저장된 것과 같이 스프링 컨테이너도 이러한 파일을 가지고 있어야 한다. 이 파일이 우리가 위에서 생성한 applicationContext.xml 파일이다.
스프링 컨테이너는 BeanFactory와 ApplicationContext 크게 두 종류로 나눌 수 있다. BeanFactory는 xml 파일에 등록된 bean 객체를 생성하고 관리하는 기본적인 기능만 제공한다. 또한 컨테이너 구동시 bean 객체를 생성하는 것이 아니라 클라이언트 요청에 의해서 bean 객체가 생성되는 Lazy Loading 방식을 사용한다. ApplicationContext는 BeanFactory가 제공하는 기본적인 기능 외에도 트랜잭션 관리, 다국어 처리 등 여러 기능을 지원한다. 또한 컨테이너 구동시 bean 객체를 생성하는 Pre-Loading방식을 사용한다. ApplicationContext의 구현 클래스는 다양하지만 위에서 사용한 GenericXmlApplicationContext, XmlWebApplicationContext를 주로 사용한다.
클래스 | 기능 |
GenericXmlApplicationContext | 파일 시스템이나 클래스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너 |
XmlWebApplicationContext | 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너 |
'BackEnd > Spring' 카테고리의 다른 글
[Spring] IoC, DL, DI 란? (0) | 2023.04.27 |
---|---|
[Spring] XML 파일 설정 (태그 및 속성) (0) | 2023.04.27 |
[Intellij] Spring xml 파일 (applicationContext.xml) 생성 (0) | 2023.04.23 |
[Spring JDBC] BeanPropertyRowMapper (0) | 2023.01.28 |
[Spring JDBC] NamedParameterJdbcTemplate (0) | 2023.01.28 |