Недавно я пытался поиграть с MongoDB и Spring Boot.
Я видел несколько уроков о том, как это сделать, но я столкнулся с проблемой, когда пытался вставить объект в базу данных. Проблема в том, что каждый учебник или ответ, представленный в SO, подразумевал, что я буду вызывать репозиторий, который расширяет MongoRepo через функцию REST (и в результате аннотация @Autowire будет создавать экземпляр класса). Однако это не относится к моей программе, так как мне нужно будет вызывать класс хранилища через класс, расположенный в другом пакете, который не вызывается через REST API. Первая проблема была с проверкой различных пакетов. Мне удалось решить ее с помощью baseScanPackages и аннотации @EnableMongoRepository. Я также создал класс MongoConfig, так как последний нуждался в реализации MongoClient.
Однако каждый раз, когда я вызываю класс, в котором хранится мой объект, я получаю NullPointerException . Я знаю, что проблема в том, что, поскольку я вызываю класс через новый объект, а не Autowire , интерфейс не будет создан.
Мой вопрос: Есть ли способ, которым я могу создать экземпляр интерфейса, который расширяет MongoRepository без необходимости его автоматического подключения?
Ниже приведен код:
Интерфейс
@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");
}
}
Конструктор класса, который вызывает метод сохранения
StoreTemplates storeTemplates;
/**
* Constructor.
*
* @param connection
*/
public TemplateGeneral(Connection connection) {
super(connection);
storeTemplates = new StoreTemplates(); <- This will not trigger the @Autowired class
}
Спасибо!