使用基于Java的配置,我试图将枚举映射到bean引用的映射转换为纯java配置(目前在XML和工作中),但似乎无法在文档中找到任何内容;
目前,我的XML就是这样;
<util:map id="colourHanders" key-type="com.example.ColourEnum"
value-type="com.example.ColourHandler">
<entry key="white" value-ref="whiteColourHandler"/>
<entry key="blue" value-ref="blueColourHandler"/>
<entry key="red" value-ref="redColourHandler"/>
</util:map>
Run Code Online (Sandbox Code Playgroud)
我确信它很简单但是再一次,在Pure Java中找不到关于如何表示这一点的任何内容(所以我没有任何XML配置文件).
注意; 在ColourHandler豆使用@Component注释,例如创建.
@Component
public class RedColourHandler implements ColourHander{
.....
}
Run Code Online (Sandbox Code Playgroud)
并且colourHandlers的地图被引用为;
@Resource(name="colourHandlers")
private Map<ColourHandlerEnum, ColourHandler> colourHandlers;
Run Code Online (Sandbox Code Playgroud)
谢谢,
伊恩.
her*_*ung 15
你可能想要这样的东西:
@Configuration
public class MyConfiguration {
@Bean public Map<ColourEnum, ColourHandler> colourHandlers() {
Map<ColourEnum, ColourHandler> map = new EnumMap<>();
map.put(WHITE, whiteHandler());
// etc
return map;
}
@Bean public ColourHandler whiteHandler() {
return new WhiteHandler();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要将处理程序保留为@Components,则可以将它们自动装入配置类:
@Configuration
public class MyConfiguration {
@Autowired private WhiteColourHandler whiteColourHandler;
@Bean public Map<ColourEnum, ColourHandler> colourHandlers() {
Map<ColourEnum, ColourHandler> map = new EnumMap<>();
map.put(WHITE, whiteColourHandler);
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
由于您已经为每个 ColorHandler 拥有了一个唯一的类/@Component,因此我只需让 Spring 找出要使用的内容(不需要 @Autowire 注入,也不需要任何其他创建方法):
@Configuration
public class MyConfiguration {
@Bean public Map<ColourEnum, ColourHandler> colourHandlers(
WhiteColourHandler whiteHandler,
BlueColourHandler blueHandler,
RedColourHandler redHandler) {
Map<ColourEnum, ColourHandler> map = new EnumMap<>();
map.put(WHITE, whiteHandler);
map.put(BLUE, blueHandler);
map.put(RED, redHandler);
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12296 次 |
| 最近记录: |