Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Component的Autowire哈希映射_Java_Spring_Spring Mvc_Autowired - Fatal编程技术网

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