You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建JDA应用时,如何解决BotJokeService构造器参数错误?

解决方法

你的问题核心是没有让Spring容器管理BotJokeService的实例,手动new时无法获取Spring生成的PlayerRepository Bean,导致构造器参数不匹配错误。按以下步骤修正:

1. 把BotJokeService标记为Spring Bean

给BotJokeService添加@Service或@Component注解,让Spring自动创建它的实例并注入依赖的PlayerRepository:

import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.stereotype.Service;

@Service
public class BotJokeService extends ListenerAdapter {
    private final PlayerRepository playerRepository;

    // Spring会自动注入PlayerRepository的实例
    public BotJokeService(PlayerRepository playerRepository) {
        this.playerRepository = playerRepository;
    }

    // 你的事件处理逻辑(比如onMessageReceived)
}

2. 在启动类中依赖注入BotJokeService

不要手动new BotJokeService(),而是通过Spring的依赖注入获取实例,再添加给JDA作为监听器。推荐实现CommandLineRunner确保Spring上下文加载完成后再初始化JDA:

import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.requests.GatewayIntent;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DcBot1Application implements CommandLineRunner {

    private final BotJokeService botJokeService;

    // 构造器注入Spring管理的BotJokeService
    public DcBot1Application(BotJokeService botJokeService) {
        this.botJokeService = botJokeService;
    }

    public static void main(String[] args) {
        SpringApplication.run(DcBot1Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // 初始化JDA并添加监听器
        JDA jda = JDABuilder.createDefault("你的机器人Token")
                .enableIntents(GatewayIntent.MESSAGE_CONTENT, GatewayIntent.GUILD_MESSAGES)
                .addEventListeners(botJokeService)
                .build();
        jda.awaitReady();
    }
}

3. 确保PlayerRepository被Spring识别

如果你的PlayerRepository是Spring Data JPA接口,记得添加@Repository注解,让Spring生成它的实现类:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface PlayerRepository extends JpaRepository<Player, Long> {
    // 自定义查询方法
}

错误原因说明

你手动new BotJokeService()时,既没有传入构造器要求的PlayerRepository参数,又无法通过new创建Spring管理的PlayerRepository有效实例。让Spring接管BotJokeService的实例化后,容器会自动完成依赖注入,不需要你手动处理这些逻辑。

内容的提问来源于stack exchange,提问作者user20572341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:52:29