我应该在DI中使用哪个注释@Resource(jsr250)或@Autowired(特定于Spring)?
我已经成功地在过去使用两种,@Resource(name="blah")和@Autowired @Qualifier("blah")
我的直觉是坚持使用@Resource标签,因为它已被jsr人批准.
有人对此有强烈的想法吗?
我了解到在 spring 中,我可以Map<String, SomeBeanInterface>通过如下配置的名称自动连接/注入:
public interface DummyInterface{
}
@Component("impl1")
public class Impl1 implement DummyInterface{
}
@Component("impl2")
public class Impl2 implement DummyInterface{
}
public class SomeUsage{
@Autowired
private Map<String, DummyInterface> mapping;
// ...
}
Run Code Online (Sandbox Code Playgroud)
并检索Componentby 字符串作为键,如:
SomeUsage use = new SomeUsage();
DummyInterface dummy = use.getMapping().get("impl1");
// do sth...
Run Code Online (Sandbox Code Playgroud)
但是,如果bean映射的关键不是的类型String,而是用户定义的类型Enum,我应该如何将bean注入到enumMap中?
我读过一些帖子,了解到它可以通过 xml 文件进行配置。但是好像是xml配置和<Enum, Bean>pair是紧耦合的,这意味着每次如果我添加一个新<Enum, Bean>对,我必须同步配置文件,与我当前的解决方案相比似乎没有区别,那就是,仍然使用<String, Bean>集合<Enum, String>并由我自己在java代码中维护映射。有没有更好的解决方案来处理这个问题?或者我错过了什么?