Java @Component的Autowire哈希映射
我有一个界面:Java @Component的Autowire哈希映射,java,spring,spring-mvc,autowired,Java,Spring,Spring Mvc,Autowired,我有一个界面: public interface EmailSender { void send(Locale locale, List<User> recipients, int ticketId); } 我得到一个例外: 没有类型为“java.util.HashMap”的合格bean @Autowired 私人名单电子邮件发送者; 有趣的是,当我尝试将HashMap更改为List时,所有操作都很好,您知道如何正确执行吗?创建一个类,该类将扩展HashMap并自动连
public interface EmailSender {
void send(Locale locale, List<User> recipients, int ticketId);
}
我得到一个例外:
没有类型为“java.util.HashMap”的合格bean
@Autowired
私人名单电子邮件发送者;
有趣的是,当我尝试将
HashMap
更改为List
时,所有操作都很好,您知道如何正确执行吗?创建一个类,该类将扩展HashMap并自动连接该类。这对你很好
在列表中,您实际上是在自动连接EmailSender类,而不是hashmap中的字符串
将该类标记为组件并自动关联该组件。希望它对你有用。
干杯我认为,您应该在配置类中声明bean
@Bean
public HashMap<String, EmailSender> emailSenders(List<EmailSender> emailSenders){
HashMap<String, EmailSender> map = new HashMap<>();
emailSenders.forEach(sender -> map.put(sender.getClass().getName(), sender));
return map;
}
@Bean
公共HashMap电子邮件发件人(列出电子邮件发件人){
HashMap=newHashMap();
emailSenders.forEach(发送者->映射.put(发送者.getClass().getName(),发送者));
返回图;
}
如果您定义自己的bean(不可收集)类型:
使用Spring,您可以创建几个相同类型的bean。但在这种情况下,您不能这样做:
@Authowire
private MyBean bean1;
@Authowire
private MyBean bean2;
但下一步你可以做:
@Authowire
@Qualifier("firstBean")
private MyBean bean1;
@Authowire
@Qualifier("firstBean")
private MyBean bean2;
同时,您可以获取bean的所有实例,请求获取它们的列表
@Authowire
private List<MyBean> beans; // all you beans will be here
@Authowire
私有列表bean;//你所有的豆子都会在这里
如果定义了类型的bean列表或类型的映射:
也请看一看
如果您使用低于4.3的Spring版本,那么如果您定义了Map或List类型的bean,则需要使用annotation@Resource。将saw303的注释重新发布作为答案,以便更容易找到(我几乎错过了注释,直到第二次重读该操作)
使用地图而不是具体的HashMap–saw303 Dec 5'17 19:28使用地图而不是具体的HashMap
@Authowire
@Qualifier("firstBean")
private MyBean bean1;
@Authowire
@Qualifier("firstBean")
private MyBean bean2;
@Authowire
private List<MyBean> beans; // all you beans will be here