Я продолжаю изучать Spring Boot и столкнулся с проблемой циклических зависимостей. У меня есть бот со следующей структурой:
жирный font = class, @Component; Красный полужирный = @ Внедрение зависимостей (все через конструкторы)
Я получу обновление от пользователя, затем это обновление перейдет к основному обработчику (UpdateReceiver) и т.д. c. Я вижу, что мне нужен компонент Bot почти везде (для отправки сообщений), но для бота требуется UpdateReceiver, потому что я не хочу обрабатывать обновление в основном классе, просто перенаправьте его:
@Override
public void onUpdateReceived(Update update) {
//log
updateReceiver.handleUpdate(update);
}
Итак, цикл зависимости. Как я могу решить этот случай? Спасибо!
ОБНОВЛЕНИЕ
Класс бота:
@Component
@Log4j2
public class AssistantBot extends TelegramLongPollingBot {
...
private UpdateReceiver updateReceiver;
public AssistantBot(UpdateReceiver updateReceiver) {
this.updateReceiver = updateReceiver;
}
@Override
public void onUpdateReceived(Update update) {
updateReceiver.handleUpdate(update);
}
...
public synchronized void sendTextMessage(long chatId, String message) {
SendMessage textMessage = new SendMessage()
.enableMarkdown(false)
.setChatId(chatId)
.setText(message);
try {
execute(textMessage);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
...
other methods to send messages
UpdateReceiver:
@Service
public class UpdateReceiver {
private TextMessageHandler textMessageHandler;
private CallbackQueryHandler callbackQueryHandler;
private AssistantBot bot;
public UpdateReceiver(TextMessageHandler textMessageHandler,
CallbackQueryHandler callbackQueryHandler,
AssistantBot bot){
this.textMessageHandler = textMessageHandler;
this.callbackQueryHandler = callbackQueryHandler;
this.bot = bot;
}
public void handleUpdate(Update update) {
if (update.hasMessage() && update.getMessage().hasText()){
textMessageHandler.handleTextMessage(update);
}
else if (update.hasCallbackQuery()) {
callbackQueryHandler.handleCallbackQuery(update.getCallbackQuery());
}
else {
bot.sendTextMessage(update.getMessage().getChatId(),
"I can't handle this!");
}
}
}