`
wangjianjun852
  • 浏览: 49860 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

java proxy---第一步,动态编译java文件

阅读更多
假定我们现在有一个动态生成的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上百实例源码以及开源项目源代码

    多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本...

    Java开发工具JDK

    对于任何Java开发者来说,安装并熟悉JDK是入门的第一步。 在JDK 8u201版本中,我们有以下几个关键知识点: 1. **Java编译器(javac)**:这个工具将Java源代码(.java文件)编译成字节码(.class文件),这是Java...

    3步把您的JAVA程序转换为WEBSERVICE

    #### 第一步:准备Java类 在将Java程序转换为Web服务之前,首先需要有一个完整的Java类,这个类包含你希望作为Web服务暴露的方法。在这个例子中,我们将创建一个简单的`HelloClient`类,它只有一个方法`getName`,...

    Java反射机制

    1. **获取类的Class对象**:这是反射操作的第一步,通常可以通过类的`.class`属性、`Class.forName()`方法或者对象的`.getClass()`方法来获取。 2. **获取类的Fields**:使用`Class.getFields()`或`Class....

    java程序转化成web 服务

    生成对应的class文件是必要的第一步,确保代码编译无误。 #### 2. **编写WSDD文件** WSDD(Web Services Deployment Descriptor)是一个XML配置文件,用于描述如何将一个Java类部署为Web服务。它包含了服务的命名...

    Java中的静态代理最全讲义

    第一步是定义一个代理接口,该接口将被真实主题类和代理类共同实现。通过这个接口,我们可以定义一组通用的方法签名,确保真实主题类和代理类都支持相同的方法调用。 **代码示例:** ```java // 代理接口 public ...

    javassist-3.7.ga.jar下载

    2. 创建`ClassPool`:这是使用Javaassist的第一步,`ClassPool`对象用于管理类的加载和修改。 3. 加载类:通过`ClassPool`的`get()`方法加载要修改的类。 4. 修改类:使用`CtClass`对象提供的各种方法进行修改,如...

    tomcat9.0.85可用版本压缩包

    当遇到问题时,日志文件(如catalina.out和logs目录下的其他文件)是排查问题的第一步。此外,还可以使用JMX(Java Management Extensions)工具远程监控和管理Tomcat实例。 10. **集成开发环境(IDE)支持**: ...

    Windows 64位com4j 详细使用教程

    使用`com4j`创建COM客户端的第一步是导入必要的库。在你的Java源代码中,添加以下导入语句: ```java import com4j.*; import com4j.tlbimp.*; ``` **3. 使用tlbimp.jar** `tlbimp.jar`是`com4j`提供的一个工具,...

    阿里云-消息队列-API指南-D.docx

    创建ACS(Alibaba Cloud Service)客户端是调用OpenAPI的第一步。主要参数包括: - `regionId`:指定API网关所在区域,如`cn-beijing`,`cn-hangzhou`等。 - `accessKey`:阿里云账号的Access Key,用于身份验证...

    解决Android-sdk安装问题说明

    对于初学者来说,正确配置好开发环境是非常重要的第一步。如果在安装过程中遇到其他问题,也可以参考官方文档或者在线社区寻求帮助。希望本文能够帮助大家顺利完成Android-SDK的安装配置,为后续的开发工作打下坚实...

    Apache Tomcat 的一些示例

    当遇到问题时,查看Tomcat的日志文件(位于logs目录)是第一步。错误日志、catalina.out和localhost_access_log.*.txt文件提供了诊断问题的重要线索。此外,还可以使用JMX(Java Management Extensions)进行远程...

    CXF客户端调用以及发布服务

    客户端调用远程Web服务的第一步是获取WSDL(Web Service Definition Language)文件,它定义了服务的接口和消息格式。使用CXF的`wsdl2java`工具,将WSDL文件转换为Java代码。以下是一些常用的`wsdl2java`命令行选项...

    《MyEclipse 6 Java 开发中文教程》前10章

    第二章 开发第一个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通过读取`mybatis-config.xml`配置文件来获取数据库连接信息、映射文件位置等关键参数。在手写简易MyBatis的过程中,你需要理解XML解析的基本原理,例如...

    webservice使用cxf的实例

    创建CXF Web服务的第一步是定义服务接口和实现。接口定义了服务提供的操作,而实现类则执行这些操作。例如: ```java // 服务接口 @WebService public interface HelloWorld { @WebMethod String sayHello(String...

    三步安装完成nginx负载均衡设置.docx

    **第一步:环境准备** 在进行 Nginx 负载均衡配置之前,我们需要确保有一个适合运行 Nginx 的环境。这通常涉及到以下几个方面: 1. **Java 环境**:由于某些应用可能依赖 Java,因此在 Tomcat 服务器上需要预先...

    jdk反射机制资料大合集

    2. **Class.forName()**:这个静态方法用于加载指定的类,并返回对应的Class对象,它是使用反射的第一步。 3. **Constructor、Method和Field类**:它们分别代表类的构造函数、方法和字段。通过这些类的对象,我们...

    soa-webservice-Hello-World-

    开发Web服务的第一步是定义服务接口。在Java中,这通常涉及创建一个Java接口,其中包含服务的方法。例如,我们可以定义一个`SayHello`接口,其中有一个`sayHello()`方法,该方法接收无参数并返回字符串"Hello World...

Global site tag (gtag.js) - Google Analytics