gpt4 book ai didi

java - 使用 mongoDB 的 Spring 启动返回 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 18:59:20 24 4
gpt4 key购买 nike

最近,我在尝试使用 MongoDB 和 Spring Boot。

我已经看过多个有关如何执行此操作的教程,但当我尝试将对象插入数据库时​​遇到问题。问题是,SO 中提供的每个教程或答案都暗示我将调用通过 REST 函数扩展 MongoRepo 的存储库(作为结果,@Autowire 注释将实例化该类)。但是,我的程序并非如此,因为我需要通过位于不同包中的类(未通过 REST API 调用)来调用存储类。第一个问题是扫描不同的包。我设法通过使用 baseScanPackages 和 @EnableMongoRepository 注释来解决它。我还创建了 MongoConfig 类,因为后者需要 MongoClient 实现。

但是,每次调用存储对象的类时,都会收到 NullPointerException。我知道问题在于,由于我通过新对象调用该类而不是 Autowire 它,因此该接口(interface)不会被实例化。

我的问题是:有没有一种方法可以实例化扩展 MongoRepository 的接口(interface),而无需 Autowiring 它?

下面是代码:

界面

@Repository
public interface TemplateRepository extends MongoRepository<Template,String> {
}

商店类别

@Component
public class StoreTemplates {

\\The issue is here. This class is never instantiated.
private TemplateRepository templateRepository;
@Autowired
public StoreTemplates(TemplateRepository templateRepository) {
this.templateRepository=templateRepository;
}

public void store(Template template){

if(templateRepository!=null)
templateRepository.save(template);
else
System.out.println("not initialised");
}
}

调用 save 方法的类的构造函数

StoreTemplates storeTemplates;
/**
* Constructor.
*
* @param connection
*/
public TemplateGeneral(Connection connection) {
super(connection);
storeTemplates = new StoreTemplates(); <- This will not trigger the @Autowired class
}

谢谢!

最佳答案

最后一段代码不正确,其中实例化是通过 new 关键字完成的。直到或除非您不允许 Spring 进行注入(inject),这是使用 Spring 的主要目的。我看不到有什么方法可以直接获取它。

关于java - 使用 mongoDB 的 Spring 启动返回 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59651089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com