Java 基于局部方法参数的Bean注入

Java 基于局部方法参数的Bean注入,java,spring,dependency-injection,Java,Spring,Dependency Injection,我是春天的新手,面临着一个奇怪的问题。假设我有以下几点: class StatsCollector { private final List<Stat> stats; private UserId userId; . . . public void findUserId() { userId = UserService.getUserId(); } public void compileStats() { stats.stream().forEach(stat -&

我是春天的新手,面临着一个奇怪的问题。假设我有以下几点:

class StatsCollector {
private final List<Stat> stats;
private UserId userId;
.
.
.
public void findUserId() {
    userId = UserService.getUserId();
}

public void compileStats() {
    stats.stream().forEach(stat -> {
        stat.fetchStats();
    });
}
class StatsCollector{
私人最终名单统计;
私有用户标识;
.
.
.
public void findUserId(){
userId=UserService.getUserId();
}
公共屋{
stats.stream().forEach(stat->{
stat.fetchStats();
});
}
}

我正在使用spring,我想根据不同的用户ID注入不同的Stat列表。假设我的spring配置有:

<util:list id="ATypeStats">
    <value>fooA</value>
    <value>barA</value>
</util:list>

<util:list id="BTypeStats">
    <value>fooB</value>
    <value>barB</value>
</util:list>

福阿
巴拉
笨蛋
倒钩
问题:在从服务获取用户ID后,是否可以基于代码中的用户ID注入ATypeStats或BTypeStats


我的问题是,我无法提前知道用户ID以任何方式使用构造函数注入。用户ID是使用服务获得的,然后我需要从spring配置中注入所需列表。

一般来说,我会选择在spring配置中不包含用户统计等“数据”。我可能会创建一个适当的服务,通过用户id进行stat查找

根据您的实际情况,有几种方法可以完成类似的任务: 如果给定应用程序实例只有一个用户统计列表有效: 您可以使用配置文件/环境有条件地加载不同的配置或部分配置(),并将其与别名组合


“真实”用户服务的替代方案是注入一个映射(对于给定的类型,映射会被填充),或者注入整个应用程序上下文并手动获取数据。然而,当适当的服务来进行查找时,我会认为这些“懒惰的黑客”更适合(显然两者都不灵活、可测试和可缩放为适当的服务)

完全无关,但为什么不做代码> STATS?FrACH(STAT:FETCCHSTS);<代码>谢谢你的反馈,我会的。但这不是我真正的问题:)您可以注入这两个列表,并在获得id后决定使用哪一个。