pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject.freemarker</groupId>
<artifactId>Projectfreemarker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Projectfreemarker</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.12.RELEASE</version>
</dependency>
<!-- servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
</project>
applicationContextTest.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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-2.5.xsd">
<!-- 自動掃描包 -->
<context:component-scan base-package="com.spring.freemarker" />
<!-- 配置freeMarker的模板路徑 -->
<bean id="freeMarkerConfigurer"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--property name="freemarkerSettings" ref="freemarkerConfiguration"/ -->
<property name="templateLoaderPath">
<value>classpath:/freemarker</value>
</property>
<property name="freemarkerSettings"><!-- 設置FreeMarker環境屬性-->
<props>
<!--<prop key="template_update_delay">1800</prop>刷新模板的週期,單位爲秒-->
<prop key="default_encoding">UTF-8</prop><!--模板的編碼格式 -->
<prop key="locale">zh_CN</prop><!-- 本地化設置-->
</props>
</property>
</bean>
<bean id="FreeMarkerController" class="com.myprobject.controller.imp.FreeMarkerControllerImp"/>
</beans>
FreeMarkerController.java
package com.myprobject.controller;
import java.util.Map;
public interface FreeMarkerController {
public String getProductionFile(Map<String,Object> freemarkerData,String templateName);
}
FreeMarkerControllerImp.java
package com.myprobject.controller.imp;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import com.myprobject.controller.FreeMarkerController;
import freemarker.template.Template;
public class FreeMarkerControllerImp implements FreeMarkerController{
//FreeMarker
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
/**
* 生成java文件
* freemarkerData 數據源
* templateName 模板名稱
*
*/
public String getProductionFile(Map<String, Object> freemarkerData,
String templateName) {
// TODO Auto-generated method stub
String freemarkerText="";
try {
//經過指定模板名獲取FreeMarker模板實例
Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate(templateName);
freemarkerText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,freemarkerData);
} catch (Exception e) {
e.printStackTrace();
}
return freemarkerText;
}
public FreeMarkerConfigurer getFreeMarkerConfigurer() {
return freeMarkerConfigurer;
}
public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
this.freeMarkerConfigurer = freeMarkerConfigurer;
}
}
JavaServerTemplate.ftl
package com.myprobject.service;
public class ${class} {
<#list properties as prop>
private ${prop.type} ${prop.name};
</#list>
<#list properties as prop>
public ${prop.type} get${prop.name?cap_first}(){
return ${prop.name};
}
public void set${prop.name?cap_first}(${prop.type} ${prop.name}){
this.${prop.name} = ${prop.name};
}
</#list>
}
TestFreemarker.java
package com.myprobject.test;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.myprobject.controller.FreeMarkerController;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
@RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations = {"classpath:applicationContextTest.xml"})(前面加個@不知道爲何寫了@符號markdown保存不了)
public class TestFreemarker {
@Autowired
public FreeMarkerController freeMarkerController;
@Test
public void testFreeMarker(){
Map<String, Object> root = new HashMap<String, Object>();
root.put("class", "F32B");
Collection<Map<String, String>> properties = new HashSet<Map<String, String>>();
root.put("properties", properties);
Map<String, String> currency = new HashMap<String, String>();
currency.put("name", "currency");
currency.put("type", "String");
properties.add(currency);
Map<String, String> amount = new HashMap<String, String>();
amount.put("name", "amount");
amount.put("type", "Double");
properties.add(amount);
System.out.println(freeMarkerController.getProductionFile(root, "JavaServerTemplate.ftl"));
}
public FreeMarkerController getFreeMarkerController() {
return freeMarkerController;
}
public void setFreeMarkerController(FreeMarkerController freeMarkerController) {
this.freeMarkerController = freeMarkerController;
}
}