美文网首页
使用Javassist实现AOP

使用Javassist实现AOP

作者: 炒鸡大馒头 | 来源:发表于2022-05-24 11:18 被阅读0次

在spring等框架中经常会用到AOP对已有的功能做切面处理,比如:日志记录,数据库事务处理,缓存,权限处理等,需要用到动态代理,常见的动态代理有:

JDK ProxyGenerator、CGLIB、Javassist、ASM

其原理都是修改字节码生成class文件,然后通过类加载器重新加载动态生成的class文件

其中Javassist使用最为简单:

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.28.0-GA</version>
</dependency>
package com.example.javassist;

public class Hello {

    public static void say() {
        System.out.println("hello world!");
    }

}
package com.example.javassist;

import javassist.*;

public class Javassist {

    public static void main(String[] args) throws Exception {
        ClassPool pool = ClassPool.getDefault();
        CtClass cc = pool.get("com.example.javassist.Hello");
        CtMethod personFly = cc.getDeclaredMethod("say");
        personFly.insertBefore("System.out.println(\"执行方法之前\");");
        personFly.insertAfter("System.out.println(\"执行方法之后\");");
        cc.toClass();
        Hello.say();
    }

}

输出结果:

执行方法之前
hello world!
执行方法之后

相关文章

  • 使用Javassist实现AOP

    在spring等框架中经常会用到AOP对已有的功能做切面处理,比如:日志记录,数据库事务处理,缓存,权限处理等,需...

  • Java字节码修改 - javassist

    AOP的实现一般使用了动态代理和字节码修改,本文介绍使用javassist实现类的创建和修改 添加依赖 使用字节码...

  • spring-aop

    aop概念aop概念aop术语AOP实现方式1、spring-aop(使用xml文件实现AOP)2、AspectJ...

  • AOP学习总结-Javassist捕获异常之创建gradle插件

    如何利用 Javassist 去优雅的实现一个异常捕获功能,可以参考文章一文应用 AOP | 最全选型考量 + 边...

  • Spring AOP实现

    使用SpringBoot实现AOP动态代理 1 使用CGLIB实现AOP动态代理 .properties .xml

  • Javassist 实现AOP、动态创建代码

    Javassist是基于ASM,提供了更高级的API,执行效率比ASM差一些,但无需掌握字节码指令的知识,对使用者...

  • Spring框架AOP源码分析(二)

    AOP编程使用 1.注解版本实现AOP 2.XML方式实现AOP Xml实现aop编程:1) 引入jar文件 【...

  • AOP之Javassist

    javassist简介 Javassist作用是在编译器间修改class文件,修改时机是在class文件被转化为d...

  • Android AOP

    North_2016安卓AOP三剑客:APT,AspectJ,Javassist https://www.ji...

  • springboot aop

    springboot怎样使用aop呢?我们知道aop的实现一种是jdk动态代理实现aop,一种是cglib动态代理...

网友评论

      本文标题:使用Javassist实现AOP

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