【问题标题】:modifying parameter prior to method invocation在方法调用之前修改参数
【发布时间】:2013-01-27 04:28:19
【问题描述】:

我在几个方法中有一个名为“server”的参数:

public synchronized Client getClientByStreamId(String streamId, Server server) {
  //some logic
}

public Client getClientByPublicSID(String publicSID, boolean isAVClient, Server server) {
  //some logic
}

我想要的是每次调用这些方法时都会有一个检查,即在调用方法之前对参数服务器执行:

if (server == null) {
  server = someServer; //someServer is a variable I get somewhere else
}

据我所知,Java6 中的注解一定有一些技巧,以便您可以执行类似(伪代码)的操作:

@ManipulateArgs(MyMethod);
public synchronized Client getClientByStreamId(String streamId, Server server) {
  //some logic
}

@ManipulateArgs(MyMethod);
public Client getClientByPublicSID(String publicSID, boolean isAVClient, Server server) {
  //some logic
}

private MyMethod(Server server) {
  if (server == null) {
    server = someServer; //someServer is a variable I get somewhere else
  }
}

在使用参数调用实际方法之前调用某种“预处理器”。 我只是不记得这个预处理的名称是什么。或者如果它是基于注释的或其他的。但我认为这是一个注释。

谢谢
塞巴斯蒂安

【问题讨论】:

    标签: java parameters annotations parameter-passing java-6


    【解决方案1】:

    您要查找的总称是方法拦截器。它们有多种实现方式。面向方面的编程是一种方式。请参阅教程http://www.javaworld.com/javaworld/jw-01-2002/jw-0118-aspect.html。如果您使用的是 Spring 或 JBoss 等框架,则内置了拦截器注释。

    【讨论】:

    • 你是对的。方法拦截器,这正是我正在寻找的术语。但似乎我需要一个动态的,因为我想在每个方法调用上修改/操作这个参数。这似乎非常耗费资源,因为在 Interceptor/Annotate 方法中涉及字符串比较,以将方法名称映射到正确的拦截器。我想我宁愿用一些装饰器模式来做。
    • 如果你愿意,你可以编写一个注释处理器,在编译时修改字节码。
    猜你喜欢
    • 2020-07-14
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2016-10-12
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多