当看到EasyJWeb的代码生成功能时,我感觉这个功能真的好厉害啊! 经过这几天推敲,才发现是原理是如此的简单。先让我们随着EasyJWeb实用开发指南中的“快速开发基于EJS(EasyJWeb+JPA+Spring)的数据库应用”来体验一下代码生成吧! 上面已经讲的很详细了。直接来看生成的代码:
在eclipse中的视图如:
你准备好一个带Id的domain(域对象),就可以生成下面的代码:

生成相关的java文件和xml文件

生成的模板页面
然后你可以在生成项目的根目录下面找到一个templates的目录,如下:

对照template目录下面的文件和上面生成的文件你将会发现有共同之处。 呵呵! Templates是模板的意思,很明显上面生成的代码就是根据这些templates生成的。
为了更清楚的说明模板生成代,我就把对应的文件制成表格形成对比 如下:

你打开这些模板文件你将发现他们的具体结构和生成对应的代码的结构是一摸一样的.就让我们比较一个最简单的代码:
生成代码:
package com.easyjf.necton.base.dao;
import com.easyjf.core.dao.GenericDAO;
import com.easyjf.necton.base.domain.Customer;
/**
* CustomerDAO
* @author EasyJWeb 1.0-m2
* $Id: CustomerDAO.java,v 0.0.1 2007-12-26 12:44:40 EasyJWeb 1.0-m2 Exp $
*/
public interface ICustomerDAO extends GenericDAO<Customer> {
}
模板代码:
package $!{packageName}.dao;
import com.easyjf.core.dao.GenericDAO;
import $!{packageName}.domain.$!{domainName};
/**
* $!{domainName}DAO
* @author EasyJWeb 1.0-m2
* $Id: $!{domainName}DAO.java,v 0.0.1 $!{nowTime} EasyJWeb 1.0-m2 Exp $
*/
public interface I$!{domainName}DAO extends GenericDAO<$!{domainName}> {
}
可以看到模板代码有好多特殊的符号,这些特殊的字符就是用我们给出的domain对象中的信息来填充的.EasyJWeb采用了java的反射机制来分析domain对象中的信息,然后提取相关的信息来填充模板就可以得到生成的代码了.
模板就是模板,那就是说我们可以改变这个模板生成我们自己想要的代码格式了.这个我将会在下一节慢慢介绍给大家.
参考:
EasyJWeb实用开发指南 MVC框架视图及页面跳转分析-模板技术
EasyJWeb的源代码