我有一个用@Component
注解的spring组件类,其中有ConcurrentHashMapMap字段,它是组件构造函数中的init,并在spring流侦听器中使用:
@Component
public class FooService {
private ConcurrentHashMap<Long, String> fooMap;
public FooService () {
fooMap = new ConcurrentHashMap<>();
}
@StreamListener(value = Sink.INPUT)
private void handler(Foo foo) {
fooMap.put(foo.id, foo.body);
}
}
侦听器处理由rest控制器发送消息您能告诉我为什么总是出现fooMap.put(...)
NullPointerException,因为fooMap为null并且没有初始化吗
编辑:
在@ OlgZhurakousky回答后,我发现问题出在异步方法上。当我在某个方法上添加@Async并添加@EnableAsync时,我无法再为我的@StreamListener方法使用私有修改器。您知道为什么以及如何修复它吗?https://github.com/schwantner92/spring-cloud-stream-issue谢谢。
3条答案
按热度按时间vmjh9lq91#
@Denis Stephanov当我说最低限度的时候,我的意思是。所以试着从这个开始,你会发现Map不是空的,然后从那里开始进化你的应用程序。
}
3zwjbxry2#
对于Spring,一切都必须注入。
你需要为
ConcurrentHashMap
声明一个@Bean
,它将被注入到你的Component
中。所以创建一个Configuration
类,如下所示:然后修改您的
Component
:mnemlml83#
您可以尝试使用@PostConstruct而不是构造函数吗?