首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载后Java ByteCode注入

加载后Java ByteCode注入
EN

Stack Overflow用户
提问于 2012-12-26 10:41:48
回答 1查看 791关注 0票数 4

我正在尝试在Java程序中挂接其他类的方法,我知道这可以在加载时使用Java代理来完成。但是,有没有一种方法可以在.class文件加载到JVM中之后完成,就像c++中使用Read/Writeprocessmemory()的dll钩子一样?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-26 13:45:41

如果您指的是方法拦截,则有两种选择

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

代码语言:javascript
复制
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);

打印

代码语言:javascript
复制
Before add
After add

2)面向方面编程。在我看来,开始使用它的最简单方法是Spring http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/aop.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14035471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档