加载后Java字节码注入

加载后Java字节码注入,java,methods,hook,code-injection,bytecode,Java,Methods,Hook,Code Injection,Bytecode,我试图在Java程序中钩住其他类的方法,我知道这可以在加载时用Java代理完成。但是,一旦类文件被加载到JVM中,有类似于DLL与C++中的DLL挂钩的方法吗?谢谢。如果你是指方法拦截,有两种选择 1) java.lang.reflect.Proxy。下面的测试为列表创建一个代理,并截取其方法调用。请注意,它仅适用于接口 class Handler implements java.lang.reflect.InvocationHandler { Object target; H

我试图在Java程序中钩住其他类的方法,我知道这可以在加载时用Java代理完成。但是,一旦类文件被加载到JVM中,有类似于DLL与C++中的DLL挂钩的方法吗?谢谢。

如果你是指方法拦截,有两种选择

1) java.lang.reflect.Proxy。下面的测试为列表创建一个代理,并截取其方法调用。请注意,它仅适用于接口

class Handler implements java.lang.reflect.InvocationHandler {
    Object target;

    Handler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before " + method.getName());
        Object res = method.invoke(target, args);
        System.out.println("After " + method.getName());
        return res;
    }
}
List list = new ArrayList();
List proxy = (List) Proxy.newProxyInstance(Test.class.getClassLoader(),
        new Class[] { List.class }, new Handler(list));
proxy.add(1);
印刷品

Before add
After add
2) 面向方面编程。在我看来,开始使用Spring最简单的方法是Spring

参见以下帖子: