Spring boot с mongoDB возвращает исключение NullPointerException - PullRequest
0 голосов
/ 08 января 2020

Недавно я пытался поиграть с 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
    }

Спасибо!

1 Ответ

0 голосов
/ 08 января 2020

Последний фрагмент кода неверен, если создание экземпляра выполняется с помощью нового ключевого слова. До тех пор, пока вы не допустите впрыск, который является основной целью использования пружины. Я не вижу способа получить это напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...