解决Spring Boot应用程序中的循环依赖关系

时间:2020-06-19 15:26:57

标签: java spring spring-boot

我一直在学习Spring Boot,并遇到了循环依赖问题。我有一个具有以下结构的机器人:

enter image description here

粗体 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!");
        }
    }
}

0 个答案:

没有答案