关于依赖注入出现空指针异常(kafkaTemplate NullPointerException)
-
今天在idea测试kafka推送的需求因为自己的粗心大意出现了一个Bug:在SpringBoot中的Resource Kafka template-Kafka应用程序抛出空指针,具体代码是这样的
public class KafkaProducer { @Resource private KafkaTemplate<String, String> kafkaTemplate; // 示例代码 public void sendMessage(Msg msg) { kafkaTemplate.send(msg); } }
-
后面开始查找问题,觉得是因为这里出错了
public class DirectoryWatcher { // 出错代码 KafkaProducer kafkaProducer = new KafkaProducer(); // 在该对象中调用某个方法 public void watchDirectory() { kafkaProducer.sendMessage(); } }
-
这里出错的原因是:在我的代码中,手动创建了一个
KafkaProducer
对象,而没有通过 Spring 的依赖注入来创建它。 -
以下就是我的解决方法
-
首先,将
KafkaProducer
类添加@Component
注解,让它成为 Spring 管理的 Bean,如下所示:@Component public class KafkaProducer { }
-
接下来,将
KafkaProducer
注入到DirectoryWatcher
类中,而不是手动创建新的对象。修改DirectoryWatcher
类如下:@Component public class DirectoryWatcher { private final KafkaProducer kafkaProducer; @Autowired public DirectoryWatcher(KafkaProducer kafkaProducer) { this.kafkaProducer = kafkaProducer; } }
-
主类修改如下
@SpringBootApplication public class DemoApplication { private static DirectoryWatcher directoryWatcher; @Autowired public DemoApplication(DirectoryWatcher directoryWatcher) { this.directoryWatcher = directoryWatcher; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); // 在构造函数中注入的 directoryWatcher 对象可以直接使用 directoryWatcher.watchDirectory(); } }
-