Здравствуйте! Аннотация Autowired, при запуске программы выдает null. Проект который я пишу, относится к телеграмм боту, который работает с базой данных MySQL. Я пока что новенький в сфере Spring, так что особо не понимаю почему не работает мой код. Перед тем как показать ошибку, хочу отметить что проект стал не маленьким(по моим меркам), так что если нужны будут доп материал, пишите.
Ближе к ошибке
SduBotsFamilyApplication
import kz.sdu.bot.challengeBot.component.ChallengeBotApp;
import kz.sdu.bot.eventsBot.component.EventsBotApp;
import kz.sdu.bot.helpStudentBot.component.HelpStudentBotApp;
import kz.sdu.bot.lostAndFoundBot.LostAndFoundBotApp;
import kz.sdu.bot.marketPlaceBot.component.MarketPlaceBotApp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;
@SpringBootApplication
public class SduBotsFamilyApplication {
public static void main(String[] args) {
SpringApplication.run(SduBotsFamilyApplication.class, args);
try {
TelegramBotsApi telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
telegramBotsApi.registerBot(new EventsBotApp());
telegramBotsApi.registerBot(new ChallengeBotApp());
telegramBotsApi.registerBot(new HelpStudentBotApp());
telegramBotsApi.registerBot(new MarketPlaceBotApp());
telegramBotsApi.registerBot(new LostAndFoundBotApp());
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
EventsBotApp
import kz.sdu.bot.eventsBot.component.service.EventBotService;
import kz.sdu.repository.EventRepository;
import kz.sdu.repository.TelegramAccountRepository;
import kz.sdu.repository.UserRepository;
import kz.sdu.service.EventService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
//fixme Add updating event with time zone
@Slf4j
@Component
public class EventsBotApp extends TelegramLongPollingBot {
final Logger logger = LoggerFactory.getLogger(EventBotService.class);
@Autowired
private EventRepository eventRepository;
@Autowired
private TelegramAccountRepository accountRepository;
@Autowired
private UserRepository userRepository;
@Override
public String getBotUsername() {
return "sdu_event_bot";
}
@Override
public String getBotToken() {
return System.getenv("bots:sdu_event_bot");
}
@Override
public void onUpdateReceived(Update update) {
logger.debug("User:\n" +
"account id: {}", update.getMessage().getChat().getId());
EventBotService eventBotService = new EventBotService(eventRepository, accountRepository, userRepository);
eventBotService.setIds(update.getMessage().getChat().getId(), update.getMessage().getChatId().toString());
if (update.hasMessage()) {
if (update.getMessage().hasText()) {
//todo: create new class with thread
switch (update.getMessage().getText().trim()) { //checking message on the default command
case "/events" -> eventBotService.showEvents();
case "/account" -> eventBotService.showAccount();
case "/information" -> {}
default -> eventBotService.defaultAction(update);
}
}
} else if (update.hasCallbackQuery()) {
String callbackData = update.getCallbackQuery().getData();
if (callbackData.contains("/edit_account")) {
eventBotService.editAccount(callbackData);
// } else if (callbackData.contains("/liked_events_account")) {
// eventBotService.showFavoriteEvents();
} else if (callbackData.contains("_like_event")) {
// При нажатии кнопки лайка или дизлайк, сообщение должен изменится
// кнопка на противоположную сторону
final long idEvent;
if (callbackData.contains("account")) {
idEvent = Long.parseLong(
callbackData.substring(callbackData.indexOf("&id=") + 4));
} else idEvent = Long.parseLong(callbackData.substring(
callbackData.indexOf("&id=") + 4,
callbackData.indexOf("&index"))); // get event id in callback
if (callbackData.contains("save"))
//save like message to account
eventBotService.saveEvent(idEvent);
else if (callbackData.contains("remove")) {
//remove like message to account
new EventService().removeEvent(idEvent);
}
eventBotService.editEventMessage(update, idEvent, callbackData);
} else if (callbackData.contains("/events_account")) {
eventBotService.showEvents();
}
}
}
}
UserRepository
import kz.sdu.entity.User;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import javax.persistence.LockModeType;
import java.util.List;
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
@Lock(LockModeType.READ)
List<User> findAllByStudentID(String studentId);
@Lock(LockModeType.READ)
User findUserByStudentID(String studentId);
@Lock(LockModeType.READ)
User findUserByTelegramAccount_Id(Long telegramId);
}
Получается если решить проблему, думаю можно будет решить проблему с остальными репозиториями. Прошу помочь, буду очень благодарен
PS Я думал на счет конструктора, но вот при его использовании мне придется в главном классе(SpringApp) вставлять, а так как там идет аннотация @SpringBootApplication, он не дает мне возможности вставить репы