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 f
和g
(也包含字段config
)并连接结果,如示例所示。它应扩展到更多字段,如config
(例如context
或cache
),但在实际方法签名中只允许来自客户端的请求数据(在此示例中没有简洁的说明) )。
应管理所有config
字段的生命周期,以便所有bean在某些外部管理范围(例如请求外观)的持续时间内看到相同的config
值。
可能存在解决此问题的EE模式。
我明确没有使用ThreadLocal
寻找解决方案,因为我希望能够并行运行任务(如果可能的话)。我也没有寻找AOP
和scoped bean(常量分配和GC工作,我在类似的情况下做过分析)。
我觉得解决方案可能是一种失去的艺术"今天,可能就像会话bean池的适当容器管理(带依赖注入)一样简单。诀窍是让容器知道如何管理g
中的h
和f
生命周期,同时在范围更改时注入(或改变)所有字段(例如新请求,新会话)
答案 0 :(得分:0)
假设有一些获取配置和上下文的方法,请将当前方法设置为private并创建公共便利函数:
public void foo(Request request) {
Context context = getContext();
Config config = getConfig();
foo(context, config, request);
}