有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何实现适配器模式(或针对以下情况的更具说服力的解决方案)?

问题(简洁的小版本):我有一个可以编辑的jar文件,但我想在该jar中的特定类中创建一个方法来调用另一个jar下的另一个类。 这个想法是现有的。jar将只有外部调用的方法。jar和外部。jar将返回一个值到现有的。jar以继续其处理

问题(详细版本):我使用p6spy来捕获我的应用程序生成的sql,但我需要将sql过滤到一个非常特定的级别,不仅p6spy的函数“sqlExpression”无法工作,因为即使它这样做了,也不够。 我目前已经反编译(我没有找到项目的源代码,是的,这是一个开源项目)p6spy并编辑了formattedlogger。上课是为了满足我的需要。 我的问题是,这是一个很多人必须使用的“解决方案”,而我应用的过滤器对某些人来说不够,对其他人来说根本不起作用,因为他们需要我需要的东西。 我做了一些研究,并决定我应该采取适配器的路线,我决定p6spy。jar将保持不变,但它将从另一个jar文件调用一个类,该文件将包含过滤器的特定性

但我不知道怎么做(

情景: 操作系统:CentOS 6.4版(最终版) 最有可能是虚拟机。 应用服务器:jboss-4.3.0。GA 其中包含服务器文件夹下的多个实例。 我有间谍。app_server/server/instance/lib下的jar 我知道我必须将适配器放在同一文件夹下

有没有人知道应该如何做到这一点,我可以在哪里读到这些事情,或者我应该如何进行,可能是一个不同的解决方案,或者可能是另一个想法。 我愿意接受建议

*编辑1: 我有个间谍。jar文件,其中包含一个我根据需要编辑的类。(FormattedLogger.class)

课程内容如下:

package com.p6spy.engine.logging.appender;

public abstract class FormattedLogger
{
  protected String lastEntry;

  public void logSQL(int connectionId, String now, long elapsed, String category, String prepared, String sql)
  {
    String logEntry = now + "|" + elapsed + "|" + ((connectionId == -1) ? "" : String.valueOf(connectionId)) + "|" + category + "|" + prepared + "|" + sql;
    logText(logEntry);
  }

  public abstract void logText(String paramString);

  public void setLastEntry(String inVar)
  {
    this.lastEntry = inVar;
  }

  public String getLastEntry() {
    return this.lastEntry;
  }
}

我需要它看起来像这样:

package com.p6spy.engine.logging.appender;

public abstract class FormattedLogger
{
  protected String lastEntry;

  public void logSQL(int connectionId, String now, long elapsed, String category, String prepared, String sql)
  {
    sql = method_in_another_class_and_in_other_jar_file(sql);
    logText(sql);
  }

  public abstract void logText(String paramString);

  public void setLastEntry(String inVar)
  {
    this.lastEntry = inVar;
  }

  public String getLastEntry() {
    return this.lastEntry;
  }
}

这个“另一个类中的方法”和另一个jar文件(sql)中的方法”将,顾名思义,位于这个jar之外,以便于编辑等等


共 (1) 个答案

  1. # 1 楼答案

    这个问题还没有得到解决,但这些答复对我们帮助很大

    吉姆·哈里森(Jim Harrison)建议将字节码修改作为一种解决方案,不幸的是,这不是我要走的道路

    markbernard在sourceforge上获得了源文件。net/projects/p6spy/files/p6spy,我将重新编写驱动程序/软件以适应我的场景

    谢谢大家的帮助D