我想编写一个实用程序,它可以为请求和响应进行(相对)非侵入式的日志记录,并且希望能够使用java-8 lambda/functional接口来完成它。通过函数/供应商访问lambda参数
比方说,在样本客户端调用代码:
SomeReturn retVal = someObject.doSomething(arg1, arg2);
我希望写一个记录工具,可以被调用为:
SomeReturn retVal = Recorder.withRecording(() -> someObject.doSomething(arg1, arg2))
记录器看起来像:
public static <R> R withRecording(Supplier<R> call) {
R response = call.get();
// Record the response
return response;
}
但是,我无法确定一种方法来捕获请求参数(和reque st对象)从Supplier
(和正确的 - Supplier
不关心它)。我认为即使java.util.function.Function
也不会帮助我们,因为它们不涉及国家本身。
没有求助于之类的东西
Object withRecording(Object target, Method method, Object[] arguments)
我们有什么其他选择?我知道我们可以使用AOP作为解决方案,但希望看看我们能否在没有它的情况下做到。
在此先感谢!
即使有可能(并且我不认为它是简单的),您会使用千Recorder.withRecording'。当你想要禁用/删除该录音的那一天,你会吃你的帽子。正如你所说,这听起来像是AOP的完美场景。 – Tunaki