aop 框架底层的 Javassist API

简介: 在我们学习框架的使用经常看得到的一个 jar 包
  1. javassist 可以实现 java 的动态性
  2. 比如在 java 程序运行时, 动态的添加新方法修改类结构
  3. 该类 API 与 java.lang.Class API 相似

动态的创建一个 class 对象

ClassPool pool = ClassPool.getDefault();

/** 声明类名及包名 */
CtClass ctClass = pool.makeClass("com.znsd.javassist.Emp");

/** 创建属性 */
CtField ctField = CtField.make("private Integer id;", ctClass);
ctClass.addField(ctField);

/** 创建方法 */
CtMethod ctMethod = CtMethod.make("public Integer getId(){return id;}", ctClass);
ctClass.addMethod(ctMethod);

// 将生成好的类输出在本地磁盘上
ctClass.writeFile("F:/");
System.out.println("执行成功!");

获取类的基本信息

ClassPool classPool = ClassPool.getDefault();
        
CtClass ctClass = classPool.get("com.znsd.javassist.Student");

System.out.println("获取类路径: " + ctClass.getName());
System.out.println("获取类名: " + ctClass.getSimpleName());
System.out.println("获取父类: " + ctClass.getSuperclass());
System.out.println("获取接口: " + ctClass.getInterfaces());

动态创建方法

ClassPool classPool = ClassPool.getDefault();

CtClass ctClass = classPool.get("com.znsd.javassist.Student");

/** 声明好一个方法 */
CtMethod ctMethod = 
    CtNewMethod.make("public int add(int i, int j){return i + j;}", ctClass);

ctClass.addMethod(ctMethod);

/** 获取 Class 对象用于调用创建好的方法 */
Class classes = ctClass.toClass();

Object newInstance = classes.newInstance();
Method declaredMethod = classes.getDeclaredMethod("add", int.class, int.class);
Object result = declaredMethod.invoke(newInstance, 110, 120);

System.out.println(result);

实现 aop 编程

ClassPool classPool = ClassPool.getDefault();
CtClass ctClass = classPool.get("com.znsd.javassist.Student");

CtMethod ctMethod = ctClass.getDeclaredMethod("show");

// 在方法前插入一些代码
ctMethod.insertBefore("System.out.println(\"aop:before\");");
// 在方法后插入一些代码
ctMethod.insertAfter("System.out.println(\"aop:after\");");
// 指定在哪一行插入一些代码
ctMethod.insertAt(29, "System.out.println(\"insertAt\");");

Class classes = ctClass.toClass();
Object newInstance = classes.newInstance();
Method method = classes.getDeclaredMethod("show");
method.invoke(newInstance);
目录
相关文章
|
23天前
|
API
用 Koa 框架实现一个简单的 RESTful API
用 Koa 框架实现一个简单的 RESTful API
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
52 4
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
143 3
|
19天前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
25 2
|
23天前
|
JSON JavaScript 中间件
Koa框架下的RESTful API设计与实现
在现代 Web 开发中,构建高效、可维护的 API 是至关重要的。Koa 是一个流行的 Node.js Web 应用框架,它具有简洁、灵活和强大的特性,非常适合用于设计和实现 RESTful API。
|
22天前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
29 2
|
28天前
|
API PHP 数据库
PHP中哪个框架最适合做API?
在数字化时代,API作为软件应用间通信的桥梁至关重要。本文探讨了PHP中适合API开发的主流框架,包括Laravel、Symfony、Lumen、Slim、Yii和Phalcon,分析了它们的特点和优势,帮助开发者选择合适的框架,提高开发效率、保证接口稳定性和安全性。
50 3
|
1月前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
46 4
|
21天前
|
安全 API 数据库
Python哪个框架合适开发淘宝商品详情api?
在数字化商业时代,开发淘宝商品详情API成为企业拓展业务的重要手段。Python凭借其强大的框架支持,如Flask、Django、Tornado和FastAPI,为API开发提供了多样化的选择。本文探讨了这些框架的特点、优势及应用场景,帮助开发者根据项目需求选择最合适的工具,确保API的高效、稳定与可扩展性。
25 0
|
28天前
|
安全 API 网络架构
Python中哪个框架最适合做API?
本文介绍了Python生态系统中几个流行的API框架,包括Flask、FastAPI、Django Rest Framework(DRF)、Falcon和Tornado。每个框架都有其独特的优势和适用场景。Flask轻量灵活,适合小型项目;FastAPI高性能且自动生成文档,适合需要高吞吐量的API;DRF功能强大,适合复杂应用;Falcon高性能低延迟,适合快速API开发;Tornado异步非阻塞,适合高并发场景。文章通过示例代码和优缺点分析,帮助开发者根据项目需求选择合适的框架。
69 0