package com.fyh.generate.test;
import java.beans.BeanDescriptor;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import sun.tools.jar.Main;
public class MappingObjectProperty {
public Map<String, String> putPropertyToMap(Class cls) throws Exception {
Person person = new Person();
person.setId(1);
person.setEmail("asdfsdf");
person.setName("zhangsan");
/*
* Map str = BeanUtils.describe(person); Iterator<Map.Entry> it =
* str.entrySet().iterator(); while(it.hasNext()) { Map.Entry en =
* it.next(); System.out.println("res="+en.getKey()+":"+en.getValue());
* }
*/
BeanInfo beanInfo = Introspector.getBeanInfo(cls);
PropertyDescriptor pds[] = beanInfo.getPropertyDescriptors();
BeanDescriptor bd = beanInfo.getBeanDescriptor();
System.out.println(bd.getName());
System.out.println(StringUtils.capitalize(bd.getName()));
System.out.println(StringUtils.uncapitalize(bd.getName()));
for (PropertyDescriptor propertyDescriptor : pds) {
System.out.println("property:" + propertyDescriptor.getName() + ":"
+ propertyDescriptor.getShortDescription()+":"+propertyDescriptor.getPropertyType()+":"+propertyDescriptor.getPropertyEditorClass());
}
return null;
}
public Class loadClass(File file) throws MalformedURLException, ClassNotFoundException
{
//URLClassLoader loader = new URLClassLoader(new URL[]{new URL("file:/"+file.getPath()+"/")});
URLClassLoader loader = new URLClassLoader(new URL[]{file.toURI().toURL()});
return loader.loadClass(StringUtils.substringBefore("com.fyh.generate.test.Person", ".class"));
}
public boolean compileJavaFile(File file) throws IOException
{
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector diagnosticCollector = new DiagnosticCollector();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnosticCollector, null, null);
Iterable compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList(file
.getAbsolutePath()));
JavaCompiler.CompilationTask task = compiler.getTask(null,
fileManager, diagnosticCollector, null, null, compilationUnits);
boolean success = task.call();
fileManager.close();
System.out.println((success) ? "编译成功" : "编译失败");
return success;
}
public static void main(String[] args) throws Exception {
MappingObjectProperty m = new MappingObjectProperty();
//m.putPropertyToMap(Person.class);
m.compileJavaFile(new File("F:\\workspace\\generateCode\\src\\com\\fyh\\generate\\test\\Person.java"));
Class cls = m.loadClass(new File("F:\\workspace\\generateCode\\src\\com\\fyh\\generate\\test\\Person.java"));
m.putPropertyToMap(cls);
}
}
相关推荐
JavaCompiler --JDK6 API 的简介(java动态编译) JavaCompiler 是 Java 中的一个编译器接口,提供了编译 Java 源代码的功能。在 Java SE6 中,JavaCompiler 接口是 javax.tools 包的一部分,提供了标准的方式来...
在Java编程中,有时我们需要在运行时动态地编译源代码文件,并将其打包成可执行的JAR(Java Archive)文件。这样的需求通常出现在我们希望根据用户输入或特定条件生成并执行新的代码逻辑时。本教程将深入讲解如何...
Java动态编译指的是在程序运行时将Java源代码编译为字节码并加载到Java虚拟机(JVM)中的过程。这种技术在许多场景下非常有用,例如在开发环境中进行快速迭代、AOP(面向切面编程)或运行时代码生成等。Java的`javax...
添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...
在Java编程中,动态编译和运行类是一项重要的能力,特别是在需要实时更新代码或实现热部署的场景下。本文将深入探讨如何利用Java的API来动态编译.java源文件,并执行编译后的类。 首先,Java的`javac`命令行工具是...
Java动态编译是一种技术,允许程序在运行时将源代码转换为字节码并加载到JVM(Java虚拟机)中。这种能力使得Java应用程序能够根据需要编译和执行新的代码,增强了软件的灵活性和可扩展性。在给定的场景中,用户通过...
Java 动态编译源码并调用是Java开发中的一种高级技巧,它允许程序在运行时根据需要编译和执行新的代码。这种能力在某些场景下非常有用,例如插件系统、元编程或者在运行时自动生成和执行特定逻辑。下面我们将详细...
Java 动态编译打包是Java开发中的一个重要技术,它允许程序在运行时生成和编译源代码,然后即时加载到应用程序中。这种技术在许多场景下都非常有用,例如实现动态代码生成、动态加载和插件化系统。下面将详细讨论...
Java 动态编译小工具是一种实用的程序开发辅助工具,尤其在面对复杂或需要频繁迭代的项目时,它的价值尤为突出。这个工具的核心功能是能够在运行时动态编译Java源代码并将其加载到Java虚拟机(JVM)中,从而实现对...
Java动态编译特性是Java平台一个非常强大的功能,它允许我们在程序运行时将源代码编译成字节码,然后直接加载到JVM中执行。这个特性极大地提升了Java的灵活性和适应性,使得我们可以实现一些在编译时无法确定的复杂...
在Java编程中,动态编译和运行类是一项重要的技术,特别是在需要实时更新代码或实现热部署的场景下。本文将详细讲解如何在Java中实现动态编译.java源代码文件并执行编译后的类。 首先,我们需要理解Java的编译过程...
1. **Java编译API:Javacompiler接口** Java提供了一个内置的`javax.tools.JavaCompiler`接口,它是Java工具接口(Java Tool API)的一部分,允许我们在程序中调用Javac编译器。要使用这个接口,首先需要引入`tools...
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
SpringBoot 应用动态编译 Java 源码并注入 Spring 容器,实现动态修改接口和抽象类的实现。注意,项目以 Jar 包形式启动时要在命令行引入 tools.jar 的包,IDEA下可直接调试。 基于接口、抽象类实现不停机动态调整...
利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性的项目源码,具体详情请查看相关博客https://blog.csdn.net/qq_31142553/article/details/85013989
后来考虑到这样编程的任务很重,时间有限 后来在网上搜搜,看到使用动态编译并使用反射机制 ,这样计算表达式的编程就容易多了. 前几天要做一个计算数学表达式的题目,本来计划使用解析表达式的方法来解析各种数学...
在Java编程环境中,有时我们需要在程序运行时动态地编译.java源代码文件并执行新编译的类。这种能力在诸如代码热更新、插件系统或者测试自动化等场景下非常有用。本文将深入探讨如何在Java中实现动态编译与运行。 ...
JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA...