我一直在学习Spring Boot,并遇到了循环依赖问题。我有一个具有以下结构的机器人:
粗体 font =类,@ Component; 红色粗体 = @Dependecy注入(全部通过构造函数)
我将从用户那里获得一个更新,然后此更新转到主处理程序(UpdateReceiver)等。我看到几乎到处都需要Bot bean(以发送消息),但是Bot需要UpdateReceiver,因为我不想要处理主类中的更新,只需将其重定向:
@Override
public void onUpdateReceived(Update update) {
//log
updateReceiver.handleUpdate(update);
}
因此,获取周期依赖性。如何解决这种情况?谢谢!
更新
Bot类:
@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!");
}
}
}