gpt4 book ai didi

java - 动态代理 : how to handle nested method calls

转载 作者:行者123 更新时间:2023-12-01 19:07:46 28 4
gpt4 key购买 nike

我正在尝试学习 Java 中的动态代理。

我知道它们是如何工作的,但我找不到解决我的问题的方法:给定一个接口(interface)及其使用方法 a()、b() 和 c() 的实现,将一个嵌套到另一个中(假设 a()调用 b() 调用 c()),我想代理我的对象来记录对方法的每个调用。

因此,我对 InvocableHandler 进行了编码,例如 invoke() 方法在执行之前打印一条日志行。

但是当我调用 proxy.a() 时,仅记录方法 a() 的调用,而不记录整个方法链。

我错过了什么?代理的目标是否必须是代理本身?

最佳答案

嗯,对象本身并不知道它正在被代理,因此当 a() 调用 b() 时,这将是一个正常的“对象内”调用。

如果代理的目标是代理本身,则会出现循环。

解决此问题的一种方法(如果确实需要)是向目标对象引入委托(delegate),并使用代理或将其自身设置为委托(delegate)。奇怪,但可能有用。不过,请注意循环。

关于java - 动态代理 : how to handle nested method calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com