我是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配置中注入所需的列表。
答案 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;当一个适当的服务进行查找会更合适(并且两者显然不像适当的服务那样灵活,可测试和可扩展)