首页 > 其他分享 >两种修改字节码改变函数执行方式

两种修改字节码改变函数执行方式

时间:2023-08-23 15:14:26浏览次数:32  
标签:respond return 字节 修改 state returnRet beforeRet ReturnType 函数

1

示例


public ReturnType function() {

  try {
            Object[] args = new Object[]{};
            Ret beforeRet = callOnBefore(args...);

            // 返回对象
            if (beforeRet.state == 1) {
                return (ReturnType) beforeRet.respond;
            }
            // 抛出异常
            if (beforeRet.state == 2) {
                throw (Throwable) beforeRet.respond;
            }

            // 执行正常的业务逻辑
            ReturnType retValue = ...;

            Ret returnRet = callOnReturn(retValue);
            // 返回对象
            if (returnRet.state == 1) {
                return (ReturnType) returnRet.respond;
            }
            // 抛出异常
            if (returnRet.state == 2) {
                throw (Throwable) returnRet.respond;
            }
            return retValue;
        } catch (Throwable t) {
            Ret throwRet = callOnThrow(t);
            // 返回对象
            if (throwRet.state == 1) {
                return (ReturnType) throwRet.respond;
            }
            // 抛出异常
            if (throwRet.state == 2) {
                throw (Throwable) throwRet.respond;
            }
            throw t;
        }

}

2

    public Integer function() {

        callOnBefore(args...);
        
        // 业务逻辑
        returnVal
        
        callOnReturn(returnVal);
        
        return returnVal;
    }

标签:respond,return,字节,修改,state,returnRet,beforeRet,ReturnType,函数
From: https://www.cnblogs.com/cyyyyx/p/17651655.html

相关文章

  • 直播网站源码,mysql,mariadb 密码忘记,修改密码
    直播网站源码,mysql,mariadb密码忘记,修改密码两种修改方法: 1、直接在shell命令行使用mysqladm命令修改。 #mysqladmin-uroot-poldpasswordpasswordnewpassword ​这种方法的弊端在于会明文显示密码。2、登陆数据库修改密码。 #mysql-uroot-p  2.1更新......
  • 无涯教程-PHP - 错误处理函数
    这些是处理错误处理和日志记录的功能。它们使您可以定义自己的错误处理规则,以及修改错误记录方式。运行时配置这些功能的行为受php.ini中的设置影响,这些设置在下面定义。NameDefaultChangeableChangelogerror_reportingNULLPHP_INI_ALLdisplay_errors"1"PHP_INI_ALL......
  • 无涯教程-PHP - preg_split()函数
    preg_split()-语法arraypreg_split(stringpattern,stringstring[,intlimit[,intflags]]);preg_split()函数的操作与split()完全相同,只不过正则表达式被接受为pattern的输入参数。如果指定了可选的输入参数limit,则仅返回子字符串的限制数量。标志可以是以下标志......
  • 5、oracle迁移到postgres-oracle中使用的`nvl`函数更改为统一的`coalesce`函数
    目录oracle迁移到postgres-oracle中使用的nvl函数更改为统一的coalesce函数1、oracle的nvl函数2、postgre的coalesce函数oracle迁移到postgres-oracle中使用的nvl函数更改为统一的coalesce函数nvl函数与coalesce函数都是值非空时,给默认值,oracle中也存在coalesce函数1、oracle的......
  • 4、oracle迁移到postgres-oracle中使用的`decode`函数使用`case when`统一语法
    目录oracle迁移到postgres-oracle中使用的decode函数使用casewhen统一语法1、oracle的decode语法2、postgres的casewhenoracle迁移到postgres-oracle中使用的decode函数使用casewhen统一语法oracle中也有使用casewhen语法,使用decode函数比较简洁。1、oracle的decode语法匹......
  • 字节跳动基于DataLeap的DataOps实践
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群本文根据ArchSummit全球架构师峰会(深圳站)来自抖音数据研发负责人王洋的现场分享实录整理而成(有删减),本次分享主要包含字节跳动数据研发的模式与挑战、DataOps理念在字节的具象、DataOps产品化......
  • 时区修改
    1.查询当前系统信息>cat/etc/centos-release2.查询操作系统的发行版号>uname-r3.查询当前系统时区>timedatectl|grep"Timezone"4.设置为北京时区>timedatectlset-timezoneAsia/Shanghai5.查询所有时区>timedatectllist-timezones......
  • ppt 修改左下角母版背景文字
    ppt一般都有自己的母版,母版中设置了一些格式如下,左下角 修改方式  ......
  • Python基础入门学习笔记 021函数:lambda表达式
    lambda表达式的作用•Python写一些执行脚本时,使用lambda就可以省下定义函数过程,比如说我们只是需要写个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后再写调用,使用lambda就可以使得代码更加精简。•对于一些比较抽象并且整个程序执行下来只需要调用一两次的函......
  • Python基础入门学习笔记 022 函数:递归是神马
    汉诺塔游戏 树结构的定义 谢尔宾斯基三角形递归求阶乘•写一个求阶乘的函数–正整数阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。–例如所给的数是5,则阶乘式是1×2×3×4×5,得到的积是120,所以120就是4的阶乘。•假设我们n的值传入是5,那么: 实例:求阶乘1deffac......