`
文章列表
一般的java的动态编译是需要先生成java文件,然后编译成class,最后用classloader加载进来生成最终的实例的。 本例程则不需要生成任何文件,一切在内存中进行。   标签: <无>   代码片段(6)[全屏查看所有代码]
我曾经见过一个“规则引擎”,是在应用系统web界面直接编写java代码,然后保存后,规则即生效,我一直很是奇怪,这是如何实现的呢?实际这就好像jsp,被中间件动态的编译成java文件,有被动态的编译成class,同时又动态的 ...
class文件简介及加载      Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象:       class字节码文件是根据JVM虚拟机规范中规定的字节码组织规则生成的、具体class文件是怎样组织类信息的,可以参考 此博文:深入理解Java Class文件格式系列。或者是Java虚拟机规范。      下面通过一段代码演示手动加载 cla

Java 反射机制

    博客分类:
  • Java
   在我们使用形如 ClassName object = new ClassName();  的语句进行创建实例的时候,我们默认 ClassName 已经在系统内存在的了,所以直接使用new 的方式进行创建。 事实上,在启动虚拟机的时候,我们定义在系统内的类通过类的加 ...
最简单的引用外部jar包执行,首先把src下的项目源代码打包成jar包,然后执行java命令 ,class文件同理(先加载jar包,再找到main方法入口、传入参数) java -classpath 引用jar包的路径(多个用;隔开,首先要把自身项目的jar包加载进来,然后才是外部引用jar包)  base.BaseDao 参数1 参数2 如:项目源代码jar包photo.jar包main方法所在路径base.BaseDao,引用jar包ojdbc6.jar,两个jar包在d:/bat目录下,则执行java命令 java -classpath photo.jar;ojdbc6.jar ...
1、JDK6 动态编译组件   Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序。该包中提供主要类可以从 Java String、StringBuffer 或其他 CharSequence 中获取源代码并进行编译。接下来通过代码一步步讲述如何利用 JDK6 特性进行运行时编译。 // 通过 ToolProvider 取得 JavaCompiler 对象,JavaCompiler 对象是动态编译工具的主要对象 JavaCompiler compiler = Too ...
动态生成,编译,运行java文件,jdk动态代理底层实现就是利用此方法,demo已上传。  Java代码   package com.code.test;      import java.io.BufferedReader;  

Java 动态编译

    博客分类:
  • Java
一、使用 JavaCompiler 接口来编译 java 源程序(最简单的) 使用 Java API 来编译 Java 源程式有非常多方法,目前让我们来看一种最简单的方法,通过 JavaCompiler 进行编译。 我们能通过 ToolProvider 类的静态方法 getSystemJavaCompiler 来得到一个 JavaCompiler 接 口的实例。 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); JavaCompiler 中最核心的方法是 run。通过这个方法能编译 java 源程序。这 ...
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。 元注解:   元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:    1.@Target,    2.@Retention,    3.@Documented,    4.@Inherited  这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分 ...
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。 注解处理器类库(java.lang.reflect.AnnotatedElement):   Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口。除此之外,Java在java.lang.reflect 包下新增了AnnotatedElement接口,该接口代表程序中可以接受注解的程序元素,该接口主要有如下几个实现类:   C ...
读源码,怕过两天又忘记了,还是记录下吧.. 动态代理最重要的实现就是Proxy.newInstance ,那我们直接看这个方法 public static Object newProxyInstance(ClassLoader loader,       Class<?>[] interfaces,       InvocationHandler h)//这里有三个参数,第一个是传入classloader,一般情况是传入当前的classloader.但是我在上一节模拟实现里传入的是URL loader..第二个参数表示的是接口,第三个是Invocationhandler,除了第 ...
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了。     废话不多说了,先来看一下JDK的动态是怎么用的。  Java代码   package dynamic.proxy;      
写在前面: 大神和diao炸天的亲请绕道.. 关于代理模式的概念这里省去,大家可以放鸟尽情搜.. 关于为什么叫动态代理,个人理解是代理的类是在运行时动态生成的,大家也可以参考网上的理解.. 文笔很差,所以文字较少,都在代码和注释中..   =======一点不华丽的分割线------------------------- 开门见山,lets go..   java中可以通过jdk提供的 Proxy.newProxyInstance静态方法来创建动态代理对象,下面先来看看这个方法的实现   [java] view plaincopy
这里是想介绍一下如何通过Java的注解机制,实现对bean资源的注入。主要介绍实现的方法,至于例子的实用性不必讨论。需求:一个应用有两个数据库,分别为DB-A,DB-B。假设持久层框架使用iBatis来实现,那么SqlMapClient对象在创建时,对于两个不同的DB连接要有两个不同的SqlMapClient对象,假设我们有一个Service类为MyService.java,该类中有两个SqlMapClient对象sqlMapA、sqlMapB分别对应着DB-A、DB-B。先看看我们的SqlMapClient.java类:(自定义SqlMapClient类,用来演示。)
Java注解的基础知识点(见下面导图)基本都过了一遍,下一篇我们通过设计一个基于注解的简单的ORM框架,来综合应用和进一步加深对注解的各个知识点的理解和运用。
Global site tag (gtag.js) - Google Analytics