2020. 12. 11. 18:54ㆍ스프링프레임워크/실습
1. 스프링 환경설정 파일 생성
1-1. [src/main/resource 우클릭 - New - Other 클릭]
혹시, 스프링프로젝트 생성방법을 모른다면 여기 클릭
1-2. Spring - Spring Bean Configuration File 선택 후 Next 버튼 클릭
1-3. File name에 'applicationContext' 입력 후 Finish버튼 클릭
1-4. 생성된 스프링 환경파일 확인(applicationContext.xml)
2. 스프링 컨테이너 구동 및 테스트
2-1. TV 인터페이스 생성
package com.spring.study.polymorphism;
public interface TV {
public void powerOn();
public void powerOff();
public void volumeUp();
public void volumeDown();
}
2-2. TV 인터페이스를 구현한 SamsungTV클래스 생성
package com.spring.study.polymorphism;
public class SamsungTV implements TV{
public SamsungTV() {
System.out.println("===> SamsungTV 객체 생성");
}
@Override
public void powerOn() {
System.out.println("SamsungTV---전원 켠다.");
}
@Override
public void powerOff() {
System.out.println("SamsungTV---전원 끈다");
}
@Override
public void volumeUp() {
System.out.println("SamsungTV---소리 올린다.");
}
@Override
public void volumeDown() {
System.out.println("SamsungTV---소리 내린다.");
}
}
2-3. 스프링설정파일(applicationContext.xml)에 SamsungTV클래스 설정
앞에 작성한 클래스를 스프링 기반으로 테스트하기 위해서 SamsungTV클래스를 스프링 설정 파일에 등록.
이 때 <bean> 엘리먼트를 사용하는데 클래스 하나당 하나의 <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="com.spring.study.polymorphism.SamsungTV"></bean>
</beans>
2-3. TV객체를 테스트하기 위한 클라이언트클래스 생성 후 실행
package com.spring.study.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 컨테이너로부터 필요한 객체를 요청(Lookup)
TV tv = (TV)factory.getBean("tv");
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
//3.Spring 컨테이너를 종료
factory.close();
}
}
TVUser 클라이언트 실행 과정
1. TVUser 클라이언트가 스프링 설정 파일을 로딩하여 컨테이너 구동
2. 스프링 설정 파일에 <bean> 등록된 SamsungTV 객체 생성
3. getBean() 메소드로 이름이 'tv'인 객체를 요청(Lookup)
4. SamsungTV객체 반환
3. 스프링 설정파일 엘리먼트
3-1. <beans> 루트 엘리먼트
스프링 컨테이너는 <bean> 저장소에 해당하는 XML 설정 파일을 참조하여 <bean>의 생명주기를 관리하고 여러가지 서비스 제공하기 때문에 스프링 프로젝트전체에서 가장 중요한 역할을 담당.
스프링 설정 파일 이름은 무엇을 사용하든 상관없지만 <beans>를 루트 엘리먼트로 사용해야함.
<beans>엘리먼트 시작 태그에 네임스페이스를 비롯한 XML스키마 관련 정보가 설정됨.
STS를 이용하여 만든 스프링 설정파일에는 beans 네임스페이스가 기본 네임스페이스로 선언되어 있음.
spring-beans.xsd 스키마 문서가 schemaLocation으로 등록되어 있음.
<bean>, <description>, <alias>, <import> 등 네 개의 엘리먼트를 자식 엘리먼트로 사용할 수 있음. (<bean>, <import>정도만실제프로젝트에서사용함)
3-2. <import> 엘리먼트
스프링 설정 파일 하나에 모든 클래스를 <bean>으로 등록하여 관리할 수도 있지만, 그렇게 하면 스프링 설정 파일이 너무 길어지고 관리도 어렵기 때문에 기능별 여러 XML파일로 나누어 설정하는 것이 효율적인데, 이렇게 분리하여 작성한 설정 파일들을 하나로 통합할 때 <imprort> 엘리먼트를 사용
3-3. <bean> 엘리먼트
스프링 설정 파일에 클래스를 등록하여면 <bean>엘리먼트를 사용함.
이 때 id와 class속성을 사용하는데, id속성은 클라이언트가 컨테이너로부터 특정객체를 요청할 때 사용하므로 반드시 스프링 컨테이너 사이에서 유일해야 하고, class 속성에는 정확한 패키지 경로와 클래스 이름을 지정해야함.
3-4. <bean> 엘리먼트 속성
3-4-1. init-method 속성
스프링 컨테이너가 스프링 설정 파일에 등록된 클래스의 객체를 생성할 때 디폴트 생성자를 호출하는데, 객체를 생성한 후에 멤버변수 초기화 작업이 필요하다면 init-method속성에 정의된 메서드를 호출하여 초기화 실행.
스프링 컨테이너가 bean에 등록된 클래스의 객체를 생성한 후에 호출될 임의의 메서드를 지정할 수 있음.
3-4-2. destroy-method 속성
스프링 컨테이너가 객체를 삭제하기 직전에 호출될 임의의 메서드를 지정할 수 있음.
3-4-3. lazy-init 속성
ApplicationContext를 이용하여 컨테이너를 구동하면 컨테이너가 구동되는 시점에 스프링 설정 파일에 등록된 <bean>들을 생성하는 즉시 로딩방식으로 동작하는데, 그러면 어떤 <bean>은 자주 사용되지도 않으면서 메모리를 많이 차지하여 시스템에 부담을 주는 경우가 생김.
그래서 스프링에서는 컨테이너가 구동되는 시점이 아닌 해당 <bean>이 사용되는 시전에 객체를 생성하도록 lazy-init속성을 제공함.
<bean>을 등록할 때 lazy-init="true"로 설정하면 스프링 컨테이너는 해당 bean을 미리 생성하지 않고 클라이언트가 요청하는 시점에 생성하여 메모리 관리를 더 효율적으로 할 수 있게 됨.
3-4-4. scope 속성
스프링 컨테이너는 컨테이너가 생성한 bean을 어느 범위에서 사용할 수 있는지를 지정할 수 있는데, 이 때 scope속성을 사용함.
- scope="singleton" : scope속성값은 기본이 싱글톤인데, bean이 해당 스프링 컨테이너에 의해 단 하나만 생성되어 운용되도록 함.
- scope="prototype" : 컨테이너는 해당 <bean>이 요청될 때마다 매번 새로운 객체를 생성하여 반환함.
출처 : 스프링 퀵 스타트 [채규태 지음 / 루비페이퍼] (교재)
'스프링프레임워크 > 실습' 카테고리의 다른 글
[Springframework] STS 설치 이후 Spring Legacy project 없을 경우 해결방법 (0) | 2021.07.17 |
---|---|
[Springframework] 스프링 프로젝트 생성 (0) | 2020.12.11 |
[Springframework] STS설치방법(Marketplace이용/수동설치/직접다운로드) (0) | 2020.11.24 |