避免在Java EE中重复参数

时间:2015-10-27 23:11:33

标签: java java-ee

TL; DR 问题是避免方法签名中的重复参数而不会降低性能。

public void foo(Context context, Config config, Request request);
void helper(Context context, Request request);
void otherHelper(Context context, Config config, Request request);

我需要这样的签名:

public void foo(Request request);
void helper(Request request);
void ohterHelper(Request request);

配置不会经常变化,一些参数将是请求范围。缓存可能具有更广泛的会话范围等。

我想将这个想法应用到Java Enterprise环境中。

它应该是一个带有注入字段config的bean,它调用其他bean fg(也包含字段config)并连接结果,如示例所示。它应扩展到更多字段,如config(例如contextcache),但在实际方法签名中只允许来自客户端的请求数据(在此示例中没有简洁的说明) )。

应管理所有config字段的生命周期,以便所有bean在某些外部管理范围(例如请求外观)的持续时间内看到相同的config值。

可能存在解决此问题的EE模式。

我明确没有使用ThreadLocal寻找解决方案,因为我希望能够并行运行任务(如果可能的话)。我也没有寻找AOP和scoped bean(常量分配和GC工作,我在类似的情况下做过分析)。

我觉得解决方案可能是一种失去的艺术"今天,可能就像会话bean池的适当容器管理(带依赖注入)一样简单。诀窍是让容器知道如何管理g中的hf生命周期,同时在范围更改时注入(或改变)所有字段(例如新请求,新会话)

1 个答案:

答案 0 :(得分:0)

假设有一些获取配置和上下文的方法,请将当前方法设置为private并创建公共便利函数:

public void foo(Request request) {
  Context context = getContext();
  Config config = getConfig();
  foo(context, config, request);
}