美文网首页
Java动态编程

Java动态编程

作者: 星冉子 | 来源:发表于2019-09-29 20:25 被阅读0次

什么是动态编程

动态编程是相对于静态编程而言的,平时我们讨论比较多的静态编程语言例如Java,与动态编程语言例如JavaScript相比,二者有什么明显的区别呢?简单的说就是在静态编程中,类型检查是在编译时完成的,而动态编程中类型检查是在运行时完成的,所谓动态编程就是绕过编译过程在运行时进行操作的技术。

动态编程使用场景

1. 通过配置生成代码,减少重复编码,降低维护成本。

2. AOP的一种实现方式,方便实现性能监控和分析,日志,事务,权限校验等。

3. 实现新语言的语义,例如Groovy使用ASM生成字节码。

4. 单元测试中动态mock测试依赖。

Java动态编程方式

反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造,并生成其对象实体、或对其fields设值、或唤起其methods。

代码片段

动态代理

目前java动态代理的实现分为两种:基于JDK的动态代理和基于CGILB的动态代理。在业务中使用动态代理,一般是为了给需要实现的方法添加预处理或者添加后续操作,但是不干预实现类的正常业务,把一些基本业务和主要的业务逻辑分离。我们一般所熟知的Spring的AOP原理就是基于动态代理实现的。

基于JDK的动态代理就需要知道两个类:1.InvocationHandler(接口)、2.Proxy(类),还要知道JDK是基于接口的动态代理,因为基于JDK的动态代理一定要继承一个接口,而绝大部分情况是基于POJO类的动态代理,那么CGLIB就是一个很好的选择。

代码片段

动态编译

动态编译是从Java 6开始支持的,主要是通过一个JavaCompiler接口来完成的。通过这种方式我们可以直接编译一个已经存在的java文件,也可以在内存中动态生成Java代码,动态编译执行。

代码示例

调用Java Script引擎

Java 6加入了对Script(JSR223)的支持。ScriptEngineManager 是一个脚本框架,提供了让脚本语言来访问Java内部的方法。你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本,这个脚本API允许你为脚本语言提供Java支持。

代码片段

动态生成字节码

操作java字节码的工具有BECL/ASM/CGLIB/Javassist,其中有两个比较流行的,一个是ASM,一个是Javassist。ASM直接操作字节码指令,执行效率高,要求使用者掌握Java类字节码文件格式及指令,对使用者的要求比较高。Javassist提供了更高级的API,执行效率相对较差,但无需掌握字节码指令的知识,对使用者要求较低。

代码片段

OGNL

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。

代码片段

Groovy

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用,能够与Java 代码很好地结合,也能用于扩展现有代码。同样也是在java虚拟机(JVM)上运行的一门语言,当然也是面向对象的一个成熟的语言,但是又可以当做纯碎的脚本语言,代码量少,具有与闭包和动态语言的特性。

代码片段

相关文章

  • 动态编程语言和静态编程语言

    动态编程语言:python等 静态编程语言:java等 动态编程语言和静态编程语言区别: 动态编程语言的变量并不是...

  • Java动态编程

    什么是动态编程 动态编程是相对于静态编程而言的,平时我们讨论比较多的静态编程语言例如Java,与动态编程语言例如J...

  • 程序员练级攻略(2018):Java底层知识

    Java 字节码相关 首先,Java 最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成 Java 字节码。...

  • 面试大纲

    基础算法 排序 查找 动态规划 并发编程 复习资料 《java并发编程的艺术》 https://redspider...

  • JSP基础语法

    JSP简介 JSP: Java Server Page ,SUN公司提供的动态网页编程技术,是Java Web服务...

  • 面试问题汇总

    2017-3-22 腾讯 1、如何运行时修改Java字节码?参考Java动态编程初探——Javassist 2、如...

  • Java动态编程初探——Javassist

    Java动态编程初探——Javassist 最近需要通过配置生成代码,减少重复编码和维护成本。用到了一些动态的特性...

  • Java入门系列13 -- JSP与JSTL

    JSP JSP全称为Java Server Page 是SUN公司提供的动态网页编程技术,是Java Web服务器...

  • 如何理解JSP和MVC

    JSP: 定义:Java Server Page,是一种动态页面技术,是一种使用java编程语言编写类XML的ta...

  • springboot下自定义注解实现aop面向切面编程--增强日

    AOP面向切面编程是纵向编程,在spring框架中很多注解都是基于aop做的功能增强,原理是java的动态代理模式...

网友评论

      本文标题:Java动态编程

      本文链接:https://www.haomeiwen.com/subject/iiaiyctx.html