Spring 프레임워크, 첫번째 예제


Spring 프레임워크, 첫번째 예제




참조 : 스프링 인 액션

스프링 프레임워크의 첫번째 예제를 돌려보기 위해, 이클립스를 띄운 뒤 웹 프로젝트를 하나 생성한다.
디렉토리 구조는 아래와 같이 해준 다음, 필요한 라이브러리를 WebRoot -> WEB-INF -> lib로 복사해 넣는다. 그러면 알아서 이클립스에서 그림과 같이 세팅해 준다.



예제 코드는 간단히 인사말을 출력하는 프로그램인데, 아래와 같은 절차로 진행된다.
1. 인터페이스를 작성한다.
2. 인터페이스의 구현 클래스를 작성한다. 구현 클래스 작성시 기본 생성자를 꼭 만들어 준다.
3. 스프링 설정파일(xml 파일)을 작성한다.
4. 프로그램을 구동하는 메인 클래스를 작성한다.

인터페이스는 아래와 같이 sayGreeting()이라는 메소드 선언만을 포함한다.


package com.springinaction.chapter01.hello;



public interface GreetingService {


       public void sayGreeting();


}

그 다음은 이 인터페이스를 구현하는 구현 클래스를 작성한다. 구현 클래스는 아래와 같다.



package com.springinaction.chapter01.hello;


 


public class GreetingServiceImpl implements GreetingService {


       private String greeting;


      


       public GreetingServiceImpl() {


       }


      


       public GreetingServiceImpl(String greeting) {


             this.greeting = greeting;


       }


      


       public void sayGreeting() {


             System.out.println(greeting);


       }


      


       public void setGreeting(String greeting) {


             this.greeting = greeting;


       }


}


구현 클래스를 작성할 때, 기본 생성자를 만들어 주어야 한다. 안 만들어 줬더니, 에러 나더라. ㅡㅡ;
여기서 또한 중요한 점은 setter 메소드인데, 아래에 나올 스프링 설정 파일에서는 이 setter를 이용하여 값을 집어넣게 된다(Setter Injection).

스프링 설정 파일이다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "
http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
 <bean id="greetingService"
  class="com.springinaction.chapter01.hello.GreetingServiceImpl">
  <property name="greeting">
   <value>Buenos Dias!</value>
  </property>
 </bean>
</beans>

이 설정파일을 살펴보면, 빈의 아이디가 greetingService인데, 이 아이디는 나중에 메인 클래스에서 getBean()를 이용하여 빈을 가져올 때 인자로 넘길 값이 된다.
 
클래스 속성은 구현 클래스의 풀 네임을 적어주는 것이고, <property> 엘리먼트는 구현 클래스의 필드인 greeting의 값을 설정하기 위한 것으로서 setter 메소드를 지정하는 역할을 한다. 그때 전달되는 것은 <value> 엘리먼트의 값인 인사말이다.

이때 중요한 점은 greeting이라는 값이, 필드명이 아니라 setter 메소드의 set을 제외한 이름이라는 것이다. 필드명을 변경해도 스프링 설정 파일의 이름과 setter 메소드의 set을 제외한 이름만 일치하면 에러없이 작동함을 확인하였다.

마지막으로 이 예제를 구동시킬 메인 클래스이다.



package com.springinaction.chapter01.hello;


 


import org.springframework.beans.factory.BeanFactory;


import org.springframework.beans.factory.xml.XmlBeanFactory;


import org.springframework.core.io.FileSystemResource;


 


public class HelloApp {


       public static void main(String[] args) {


             BeanFactory factory =


new XmlBeanFactory(new FileSystemResource("hello.xml"));


             GreetingService greetingService =


 (GreetingService)factory.getBean("greetingService");


            


             greetingService.sayGreeting();


       }


}



메인 클래스에서는 크게 스프링 설정파일을 불러오고, getBean() 메소드를 호출하여 필요한 빈을 가져와 빈의 메소드를 실행하는 것이다.

프로그램을 실행하면 "Buenos Dias!"라는 문자열이 출력된다.

한 가지 어려웠던 점은, log4j의 설정이었는데 log4j.properties 파일을 설정하는 게 다소 까다로웠다. 처음에 스프링 인 액션에 나와있는데로, 파일을 작성해서 어디 둘지 몰라서 헤맸는데, 인터넷을 찾아보니 src 폴더에 넣어두면 된다고 하여 거기에 넣어도 잘 안되길래 결국은 Spring 프레임워크를 다운받은 파일 중에서 log4j.properties 파일을 찾아서 집어 넣어주니 잘 작동하였다.

책의 버전이 예전 버전이라서 잘 안맞는 것 같다. 아무튼 log4j.properties 파일의 내용은 아래와 같다.



# Configure logging for testing: optionally with log file


log4j.rootLogger=WARN, stdout


# log4j.rootLogger=WARN, stdout, logfile


 


log4j.appender.stdout=org.apache.log4j.ConsoleAppender


log4j.appender.stdout.layout=org.apache.log4j.PatternLayout


log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n


 


log4j.appender.logfile=org.apache.log4j.FileAppender


log4j.appender.logfile.File=target/spring.log


log4j.appender.logfile.layout=org.apache.log4j.PatternLayout


log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n