假定我们现在有一个动态生成的string 类型的一个类的声明如下
String src = "package com.wjj.myproxy;"+
"public class CarTimeProxy implements Moveable {"+
"Moveable car = null;"+
"public CarTimeProxy(Moveable car) {"+
"super();"+
"this.car = car;"+
"}"+
"@Override\r\n"+
"public void move() {"+
"long startTime = System.currentTimeMillis();"+
"car.move();"+
"long endTime = System.currentTimeMillis();"+
"System.out.println(\"moive time is \" + (endTime-startTime));"+
"}}";
我们只需要将这个类动态生成.class文件,并且load 到内存里面既可。
首先动态编议----代码如下--
String fileName = System.getProperty("user.dir") +"/src/com/wjj/myproxy/CarTimeProxy.java";
File file = new File(fileName);
FileWriter writer = new FileWriter(file);
writer.write(src);
writer.flush();
writer.close();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
Iterable units = fileMgr.getJavaFileObjects(fileName);
CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);
t.call();
fileMgr.close();
这样就可以得到一个.java 和一个.class 文件了。。 接下来只需要将他load 到内存里面既可。
URL[] urls = new URL[]{new URL("file:/" + System.getProperty("user.dir")+"/src")};
URLClassLoader ul = new URLClassLoader(urls);
Class clazz = ul.loadClass("com.wjj.myproxy.CarTimeProxy");
System.out.println(clazz);
以上代码为直接将生成的.class文件直接load into memory..
Constructor cos = clazz.getConstructor(Moveable.class);
Moveable moveble = (Moveable) cos.newInstance(new Car());
moveble.move();
这样就可以直接实现死定义的动态代理了。。
分享到:
相关推荐
对于任何Java开发者来说,安装并熟悉JDK是入门的第一步。 在JDK 8u201版本中,我们有以下几个关键知识点: 1. **Java编译器(javac)**:这个工具将Java源代码(.java文件)编译成字节码(.class文件),这是Java...
#### 第一步:准备Java类 在将Java程序转换为Web服务之前,首先需要有一个完整的Java类,这个类包含你希望作为Web服务暴露的方法。在这个例子中,我们将创建一个简单的`HelloClient`类,它只有一个方法`getName`,...
1. **获取类的Class对象**:这是反射操作的第一步,通常可以通过类的`.class`属性、`Class.forName()`方法或者对象的`.getClass()`方法来获取。 2. **获取类的Fields**:使用`Class.getFields()`或`Class....
生成对应的class文件是必要的第一步,确保代码编译无误。 #### 2. **编写WSDD文件** WSDD(Web Services Deployment Descriptor)是一个XML配置文件,用于描述如何将一个Java类部署为Web服务。它包含了服务的命名...
第一步是定义一个代理接口,该接口将被真实主题类和代理类共同实现。通过这个接口,我们可以定义一组通用的方法签名,确保真实主题类和代理类都支持相同的方法调用。 **代码示例:** ```java // 代理接口 public ...
2. 创建`ClassPool`:这是使用Javaassist的第一步,`ClassPool`对象用于管理类的加载和修改。 3. 加载类:通过`ClassPool`的`get()`方法加载要修改的类。 4. 修改类:使用`CtClass`对象提供的各种方法进行修改,如...
当遇到问题时,日志文件(如catalina.out和logs目录下的其他文件)是排查问题的第一步。此外,还可以使用JMX(Java Management Extensions)工具远程监控和管理Tomcat实例。 10. **集成开发环境(IDE)支持**: ...
使用`com4j`创建COM客户端的第一步是导入必要的库。在你的Java源代码中,添加以下导入语句: ```java import com4j.*; import com4j.tlbimp.*; ``` **3. 使用tlbimp.jar** `tlbimp.jar`是`com4j`提供的一个工具,...
创建ACS(Alibaba Cloud Service)客户端是调用OpenAPI的第一步。主要参数包括: - `regionId`:指定API网关所在区域,如`cn-beijing`,`cn-hangzhou`等。 - `accessKey`:阿里云账号的Access Key,用于身份验证...
对于初学者来说,正确配置好开发环境是非常重要的第一步。如果在安装过程中遇到其他问题,也可以参考官方文档或者在线社区寻求帮助。希望本文能够帮助大家顺利完成Android-SDK的安装配置,为后续的开发工作打下坚实...
当遇到问题时,查看Tomcat的日志文件(位于logs目录)是第一步。错误日志、catalina.out和localhost_access_log.*.txt文件提供了诊断问题的重要线索。此外,还可以使用JMX(Java Management Extensions)进行远程...
客户端调用远程Web服务的第一步是获取WSDL(Web Service Definition Language)文件,它定义了服务的接口和消息格式。使用CXF的`wsdl2java`工具,将WSDL文件转换为Java代码。以下是一些常用的`wsdl2java`命令行选项...
第二章 开发第一个Java应用程序 46 2.1 介绍 46 2.2 手工编写,编译并运行Java程序 46 2.3 使用Eclipse/MyEclipse来编写,编译并运行Java程序 47 2.4小结 50 第三章 Eclipse 的基础概念,配置和使用 51 3.1界面布局 ...
首先,**配置文件解析**是MyBatis工作流程中的第一步。MyBatis通过读取`mybatis-config.xml`配置文件来获取数据库连接信息、映射文件位置等关键参数。在手写简易MyBatis的过程中,你需要理解XML解析的基本原理,例如...
创建CXF Web服务的第一步是定义服务接口和实现。接口定义了服务提供的操作,而实现类则执行这些操作。例如: ```java // 服务接口 @WebService public interface HelloWorld { @WebMethod String sayHello(String...
**第一步:环境准备** 在进行 Nginx 负载均衡配置之前,我们需要确保有一个适合运行 Nginx 的环境。这通常涉及到以下几个方面: 1. **Java 环境**:由于某些应用可能依赖 Java,因此在 Tomcat 服务器上需要预先...
2. **Class.forName()**:这个静态方法用于加载指定的类,并返回对应的Class对象,它是使用反射的第一步。 3. **Constructor、Method和Field类**:它们分别代表类的构造函数、方法和字段。通过这些类的对象,我们...
开发Web服务的第一步是定义服务接口。在Java中,这通常涉及创建一个Java接口,其中包含服务的方法。例如,我们可以定义一个`SayHello`接口,其中有一个`sayHello()`方法,该方法接收无参数并返回字符串"Hello World...
首先,安装Zeroc ICE是开始的第一步。你需要访问Zeroc官方网站下载对应平台的安装包,并按照指导完成安装。安装完成后,确保你的系统路径中包含了ICE的bin目录,这样可以方便地在命令行中使用ICE工具。 接着,了解...