단순 자바 코드 생 성기
코드 는 다음 과 같 습 니 다.
/**
*
* Created by GN on 2016/11/27.
*/
public class GnTest {
@Test
public void testGn() throws IOException {
GnContext gnContext = new GnContext();
gnContext.put("domain","User");
gnContext.put("lowerDomain","user");
String path = "E:\\WorkSpace\\Idea\\ztx\\gn-cc\\src\\main\\resources\\DaoImpl.java";
Template template = GnUtil.getTemplate(path);
String target = "G:\\DaoImpl.java";
File file = new File(target);
template.merge(gnContext,file);
}
}
/**
*
* Created by GN on 2016/11/27.
*/
public class GnContext {
/**
*
*/
private Map context = new HashMap<>();
public GnContext() {
}
public GnContext(Map context) {
this.context = context;
}
public void put(String key, String value) {
context.put(key, value);
}
public String get(String key) {
return context.get(key);
}
}
/**
* Created by GN on 2016/11/27.
*/
public abstract class GnUtil {
/**
*
* @param filePath
* @return
*/
public static Template getTemplate(String filePath) throws IOException {
if (!StringUtil.hasLength(filePath)){
throw new IllegalArgumentException(" ");
}
File file = new File(filePath);
if (!file.isFile() || !file.exists()){
throw new IllegalArgumentException(" :"+filePath);
}
return new Template(file);
}
}
/**
*
* Created by GN on 2016/11/27.
*/
public class Template {
private static final String TAG_PREFIX = "${";
private static final String TAG_POSTFIX = "}";
/**
*
*/
private BufferedReader reader;
private File file;
/**
* ,eg:${domain}:key=domain,value=${domain}
*/
private Map tag = new HashMap<>();
public Template(File file) throws IOException {
this.file = file;
//
initReader();
}
private void initReader() {
if (file == null) {
throw new IllegalArgumentException(" ");
}
try {
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "UTF-8");
this.reader = new BufferedReader(inputStreamReader);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/**
* tag
*
* @param text
*/
private void initTag(String text) {
if (!StringUtil.hasLength(text)) {
return;
}
String tagFlag = getTagFlag(text);
String tagText = getTagText(text);
this.tag.put(tagText, tagFlag);
//
int prefix = text.indexOf(TAG_PREFIX);
String subText = text.substring(prefix + 2 + tagText.length());
if (hasTag(subText)) {
initTag(subText);
}
}
/**
* ,${domain}
*
* @param text
* @return
*/
private String getTagFlag(String text) {
int prefix = text.indexOf(TAG_PREFIX);
int postfix = text.indexOf(TAG_POSTFIX);
return text.substring(prefix, postfix + 1);
}
/**
* ,${domain} --> domain
*
* @param text
* @return
*/
private String getTagText(String text) {
String tagFlag = getTagFlag(text);
return tagFlag.substring(2, tagFlag.length() - 1);
}
/**
*
*
* @param text
* @return
*/
private boolean hasTag(String text) {
if (!StringUtil.hasLength(text)) {
return Boolean.FALSE;
}
return text.indexOf(TAG_PREFIX) > 0 && text.indexOf(TAG_POSTFIX) > 0;
}
/**
*
*
* @param context
* @param target
*/
public void merge(GnContext context, File target) throws IOException {
if (reader == null) {
throw new IllegalArgumentException(" ");
}
if (context == null) {
throw new IllegalArgumentException(" GnContext ");
}
if (target == null) {
throw new IllegalArgumentException(" ");
}
String temp;
FileWriter writer = new FileWriter(target, true);
while ((temp = reader.readLine()) != null) {
if (hasTag(temp)) {
//
List tagTextList = findTagTextList(temp);
if (!tagTextList.isEmpty()) {
for (String text : tagTextList) {
String value = context.get(text);
if (StringUtil.hasLength(value)){
temp = temp.replace(TAG_PREFIX + text + TAG_POSTFIX, value);
}
}
}
}
writer.write(temp + "
");
writer.flush();
}
writer.close();
}
/**
*
*
* @param lineText
* @return
*/
private List findTagTextList(String lineText) {
List tagTextList = new ArrayList<>();
if (StringUtil.hasLength(lineText) && hasTag(lineText)) {
String tmp = lineText;
while (hasTag(tmp)) {
String tagText = findTagText(tmp);
if (!tagTextList.contains(tagText)) {
tagTextList.add(tagText);
}
int begin = tmp.indexOf(tagText);
tmp = tmp.substring(begin + tagText.length()+1);
}
}
return tagTextList;
}
/**
*
*
* @param text
* @return
*/
private String findTagText(String text) {
if (!StringUtil.hasLength(text)) {
return null;
}
return getTagText(text);
}
}
4.567917.테스트 를 위해 템 플 릿 을 사용 합 니 다.4.567918.
/**
* Created by GNon 2016/9/8.
*/
@Service
@Transactional
public class ${domain}ServiceImpl implements I${domain}Service {
@Autowired
private ${domain}Dao dao;
@Override
public void save(${domain} ${lowerDomain}) {
dao.save(${lowerDomain});
}
@Override
public void update(${domain} ${lowerDomain}) {
dao.update(${lowerDomain});
}
@Override
public void delete(Serializable id) {
dao.delete(id);
}
@Override
public ${domain} findById(Serializable id) {
return dao.findById(id);
}
@Override
public List findAll() {
return dao.findAll();
}
@Override
public PageData findListByPage(PageData pageData) {
return dao.findListByPage(pageData);
}
}
/**
*
* Created by GN on 2016/11/28.
*/
public class GnCreator {
/**
*
*/
private List domains = new ArrayList<>();
/**
*
*/
private String baseTemplatePath = "E:\\WorkSpace\\demo\\src\\main\\resources\\";
/**
*
*/
private String baseSavePath = "E:\\WorkSpace\\demosrc\\main\\java\\com\\gn\\demo\\";
/**
*
*/
private List templates = new ArrayList<>();
private final String DAOIMPL = "Dao.java";
private final String SERVICE = "Service.java";
private final String SERVICEIMPL = "ServiceImpl.java";
public GnCreator() {
//
//
String[] domainList = {"User"}; // , ,
List asList = Arrays.asList(domainList);
domains.addAll(asList);
//
templates.add(DAOIMPL);
templates.add(SERVICE);
templates.add(SERVICEIMPL);
}
public void create() throws IOException {
System.out.println(" >>>>>>>>>>>>>>>>>>>>");
for (String domain : domains) {
System.out.println(" 【"+domain+"】 ...............");
//
GnContext gnContext = new GnContext();
gnContext.put("domain",domain);
gnContext.put("lowerDomain",domain.toLowerCase());
//
for (String tp : templates) {
String templatePath = baseTemplatePath+tp;
Template template = GnUtil.getTemplate(templatePath);
//
String targetFilePath = "";
String targetFileName = "";
if (tp.equals(DAOIMPL)){
targetFilePath = baseSavePath+"dao\\impl\\";
targetFileName = domain+DAOIMPL;
}else if (tp.equals(SERVICE)){
targetFilePath = baseSavePath+"service\\";
targetFileName = "I"+domain+SERVICE;
}else if (tp.equals(SERVICEIMPL)){
targetFilePath = baseSavePath + "service\\impl\\";
targetFileName = domain+SERVICEIMPL;
}
// ,
File file = new File(targetFilePath);
if (!file.exists()){
file.mkdirs();
}
File targetFile = new File(targetFilePath+targetFileName);
template.merge(gnContext,targetFile);
}
System.out.println(" 【"+domain+"】 ...............");
}
System.out.println(" >>>>>>>>>>>>>>>>>>>>>>>>");
}
}
4.567917.이상 은 모든 코드 입 니 다.자신의 수 요 를 적용 하기 위해 서 입 니 다.다른 사람 에 게 도움 이 된다 면 간단 한 사 고 를 하 겠 습 니 다.코드 의 주요 실현 기능 은 템 플 릿 에 있 는${domain}을 얻 은 다음 에 교체 하 는 방식 으로 들 어 오 는 GnContext 에 대응 하 는 값 을 최종 적 으로 현대 코드 로 생 성 합 니 다.한 곳 을 바 꾸 는 것 은 내 가 직접 검색 해서 바 꾸 는 것 이다.원한 다 면 정규 표현 식 으로 처리 해도 된다.그러면 훨씬 간결 해 질 것 이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.