基于本地方法参数的Bean注入

时间:2016-01-29 06:11:05

标签: java spring dependency-injection

我是Spring的新手,面临着一个奇怪的问题。说我有以下内容:

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();
    });
}

}

我正在使用spring,我想根据不同的userId注入不同的Stat列表。说我的弹簧配置有:

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

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

问题:从服务中获取后,是否可以根据代码中的userId注入ATypeStats或BTypeStats?

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

1 个答案:

答案 0 :(得分:0)

一般情况下,我会选择不使用&#34;数据&#34;喜欢spring config中的user-stats。我可能会创建一个适当的服务,按用户ID进行统计查找。

根据您的实际情况,有几种方法可以实现这样的目标: 如果只有一个用户统计列表对给定的应用程序实例有效: 您可以使用配置文件/环境有条件地加载不同的配置或配置的一部分(https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html),并将其与别名结合使用。

&#34;真实&#34;的替代品用户服务正在注入一个映射(映射得到给定类型的填充)或者注入整个应用程序上下文并手动获取数据。然而,我会认为这些是&#34;懒惰的黑客&#34;当一个适当的服务进行查找会更合适(并且两者显然不像适当的服务那样灵活,可测试和可扩展)