2010년 5월 2일 일요일

Spring에서 Velocity 사용하기

Velocity는 템플릿 엔진으로 사용하는 오픈소스 프레임웍이다.
메일 메시지를 작성할 때나 XML 파일, 심지어는 자바 소스 코드를 생성할 때도 사용하면 유용하다.
Spring에서는 Velocity를 대부분 View (MVC)에서 사용하는데 반드시 View 용도로만 사용할 필요는 없다.

이번 글은 Velocity View를 설정하기 위한 것은 아니다.
템플릿을 사용할 경우 velocity를 이용하는 방식에 대한 것으로 보다 일반적인 사용 시 설정 방법을 이야기 한다.

스프링 빈을 설정 파일을 이용하지 않고 애노테이션 기반 설정을 사용한다.
스프링 빈 애노테이션 기반 설정에 관해서는 기회가 되면 다음에 글을 올리도록 하겠다.

스프링 환경 설정 파일


<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<import resource="classpath:META-INF/amf/amf-db.xml"/>
<import resource="classpath:META-INF/amf/amf-dao.xml"/>
<import resource="classpath:META-INF/amf/amf-service.xml"/>
<import resource="classpath:META-INF/amf/amf-rs.xml"/>
<import resource="classpath:META-INF/amf/amf-ws.xml"/>

<context:component-scan base-package="com.archnal.amf.util"/>

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
</beans>




사용 예제



package com.archnal.amf.util.service;

import java.io.StringWriter;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.velocity.app.VelocityEngine;
import org.springframework.stereotype.Service;
import org.springframework.ui.velocity.VelocityEngineUtils;

@Service("mailTemplateService")
public class MailTemplateServiceImpl implements IMailTemplateService {

public static final String WELCOME_MAIL = "velocity/welcome-mail.vm";

@Resource(name="velocityEngine")
private VelocityEngine velocityEngine;
/* (non-Javadoc)
* @see com.archnal.amf.util.service.IMailTemplateService#getMailTemplate(java.util.Map)
*/
@Override
public String getMailTemplate(Map map) throws Exception {
// TODO Auto-generated method stub
StringWriter writer = new StringWriter();
// Map map = new HashMap();
// map.put("userName", "kim");
VelocityEngineUtils.mergeTemplate(velocityEngine, WELCOME_MAIL, map, writer);
System.out.println(writer);
return writer.toString();
}


}




테스트 클래스


package com.archnal.amf.util.service;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:/spring/context-*.xml" })
public class MailTemplateServiceTest {

@Resource(name="mailTemplateService")
IMailTemplateService mailTemplateService;

@Test
public void testGetMailTemplate() throws Exception{
Map model = new HashMap();
model.put("userName", "Kim");

String result = mailTemplateService.getMailTemplate(model);

System.out.println(result);
}
}


댓글 없음:

댓글 쓰기