有问题的写法
@Component
public class SmkCenterConsumer {
@Autowired
private SmkCenterDataRepository repository;
@OnMessage
public void onMessage(String message) {
repository.save(data);
}
}
正确的写法
@Component
public class SmkCenterConsumer {
private static SmkCenterDataRepository repository;
@Autowired
public void setRepository(SmkCenterDataRepository repository) {
SmkCenterConsumer.repository = repository;
}
@OnMessage
public void onMessage(String message) {
repository.save(data);
}
}
可以看到,这个线程是tomcat启动的
在这个tomcat启动的线程中如何使用spring容器提供的@Autowired的单例bean呢?
如果不是static,这个repository就是null
在这个线程中也没有办法从spring容器中取到这个bean,所以只能把这个bean设置为static,这样这个单例bean就脱离了spring容器的限制,可以在所有线程中使用了
另一个思路:实现BeanFactoryAware,这样可以通过注入的BeanFactory拿到这个bean,应该也是可行的
记得加上 @Component 和 引入类 static 声明
————————————————
版权声明:本文为CSDN博主「const伐伐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013905744/article/details/104818462