0

我有一个 X 类,其中包含 do 方法。

我还有另外两个类 A 和 B,其中创建了 X 的对象。

有什么方法可以找出 x 的 do() 是否被 A 或 B 调用。

我不想在 do() 方法中使用参数。来自呼叫跟踪或其他什么?

我正在使用struts2,Spring。那么框架有什么帮助吗???

我想在 do() 中根据它是从 A 调用还是从 B 调用来实现一些逻辑。

4

3 回答 3

1

好吧,是的,您可以使用 s 检索堆栈Thread.getCurrentThread().getStackTrace()并读取StackTraceElementsgetClassName()并与 A 或 B 匹配。(我试图想象一个场景,这比 param 更可取并且出现空白,但是 YMMV ......)

于 2012-07-04T02:35:50.640 回答
1

可能,但是如果您必须这样做,则可能值得为单独的功能使用两种方法,这两种方法调用共享部分的单个方法。

Ascall(...)
  specialStuffA
  commonCall(...)

Bscall(...)
  specialStuffB
  commonCall(...)

commonCall(...)
  commonStuffAB 
于 2012-07-04T02:38:29.503 回答
0

我知道这看起来很连贯,但现有的逻辑可以快速发布到推特上来解决这个问题。

情景是,

我有两个动作 A 和 B 调用服务 X。

X 被 Spring AOP 拦截以添加过滤器并传递给 DAO。

如果 A 调用 X 则显示所有数据,即不应用过滤器,如果 B 调用 X 则仅显示登录用户的数据。

X 已经因为添加一些其他过滤器而被拦截,因此添加一个过滤器会很容易。此过滤器也集中存在,因此所有 A 或 B 调用 X,因此 X 将相应地完成工作。

我在这里找到了更好的方法,在 X 中有一个实例变量,而 A 的 X 实例将具有值“a”等等。

所以现在我将能够区分 A 对 X 的调用和 B 对 X 的调用。

是否有意义?

于 2012-07-04T11:12:14.000 回答