当前位置: 首页 > 知识库问答 >
问题:

java能拦截第三方代码执行吗?

卫鸿朗
2024-07-23

java的动态代理都是拦截自己写的代码,我想拦截第三方库的代码,比如
//这个第三方库的代码
x.show();
我需要在它执行的前后加上自己的代码。
第三方库没有提供钩子。也没有拓展的可能。

共有2个答案

乐正浩言
2024-07-23

如果三方库的类可以注册成spring的bean,可以直接用@Aspect进行拦截

@Component
@Aspect
public class ThirdAspect {

    @Around("execution(* com.xxx.xxx.xxx.xxx.*(..))")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        try {
            //拦截逻辑
            return pjp.proceed(pjp.getArgs());
        } catch (Exception e) {
            //异常逻辑
            throw e;
        }
    }
}
洪经义
2024-07-23

拦截第三方库的代码,和拦截自己写的代码,用法是一样的。

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface TargetInterface {
    void targetMethod();
}

class TargetImplementation implements TargetInterface {
    @Override
    public void targetMethod() {
        System.out.println("Original method execution");
    }
}

class ProxyHandler implements InvocationHandler {
    private Object target;

    public ProxyHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before method invocation");
        Object result = method.invoke(target, args);
        System.out.println("After method Invocation");
        return result;
    }
}

public class DynamicProxyExample {
    public static void main(String[] args) {
        TargetInterface target = new TargetImplementation();
        TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(
                TargetInterface.class.getClassLoader(),
                new Class[]{TargetInterface.class},
                new ProxyHandler(target));

        proxy.targetMethod();
    }
}

这段代码,是调用的自己的代码,换成其他任意jar里类方法,用法也一样的。

 类似资料:
  • 本文向大家介绍Spring MVC 拦截器实现代码,包括了Spring MVC 拦截器实现代码的使用技巧和注意事项,需要的朋友参考一下 拦截器的实现 1、编写拦截器类实现HandlerInterceptor接口; 2、将拦截器注册进springmvc框架中; 3、配置拦截器的拦截规则; 其他实现方法 WebRequestInterceptor接口: 与上一个的区别是参数区别和prehandle的方

  • 现在,当我到达spring-boot应用程序的endpoint时,它工作得很好 基本上,它根本不调用preandle。我错过了什么????

  • Cache拦截是让传输流向Squid的流行技术,它不用配置任何客户端。你可以配置路由器或交换机将HTTP连接转发到squid运行的主机。squid运行的操作系统被配置成接受外部数据包,并将其递交给squid进程。为了让HTTP拦截生效,你必须配置3个独立的因素:网络设备,squid运行的操作系统,和squid自身。 (译者注:Cache拦截实际上指的是Squid的透明代理) 9.1它如何工作? C

  • 本文向大家介绍vue axios请求拦截实例代码,包括了vue axios请求拦截实例代码的使用技巧和注意事项,需要的朋友参考一下 axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请

  • 功能限制拦截断点 bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口

  • 本文向大家介绍Java中的Struts2框架拦截器之实例代码,包括了Java中的Struts2框架拦截器之实例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Struts2框架拦截器实例的示例代码,供大家参考,具体内容如下 在看拦截器的小例子的前我们先来看看sturts2的原理   struts2自己是有拦截器的,通过拦截器可以拦截用户请求,并作出处理 拦截器作用有很多,譬如: