比如说,我有课 ProviderService
用一个 Map<ProviderEnum, Provider>
现场。这个类的构造函数如下
@Autowired
ProviderService(ProviderA provA, ProviderB provB, ...) {
map.put(ProviderEnum.A, provA);
map.put(ProviderEnum.B, provB);
...
}
``` `Provider` 是一个抽象类,其继承者用 `@Component` .
然后我意识到至少有两种可能更好的方法:
使用 `EnumMap` 为了实施 `Map` . 现在,我用 `HashMap` .
有一个 `Provider` 内的字段 `ProviderEnum` 枚举并从中删除Map `ProviderService` 完全是。
第二个选择似乎是更干净的解决方案,我开始这样写
enum ProviderEnum {
A(/* ?WHAT DO I PUT HERE? /),
B(/ Is it some kind of BeanFactory.getBean(ProviderB.class)? */),
...;
private final Provider provider;
ProviderEnum(Provider provider) {
this.provider = provider;
}
public Provider getProvider() {
return this.provider;
}
}
但是,我不知道我应该在这些构造函数中放置什么,因为它肯定不同于通常使用的情况 `@Autowired` .
我想我应该考虑使用 `BeanFactory` 但是有没有办法注入呢?我应该注射吗?还是坚持下去更好 `EnumMap` ?
1条答案
按热度按时间gt0wga4j1#
枚举是静态的,我认为更好的方法是将某个类型的集合自动连接到服务中,类似这样
提供程序接口(或您如何看待它)
在providerservice类中,可以自动关联一个集合并使用postconstruct来完成其余的工作