Erste Schritte Guice Injection nicht in jeder Klasse möglich

Diskutiere Guice Injection nicht in jeder Klasse möglich im Java Basics - Anfänger-Themen Bereich.
B

Bela B.

Hallo zusammen,

ich habe gerade das Problem, dass ich eine Klasse habe, bei der die Injection mittels Guice einfach nicht funktionieren will.
Ich benutze FieldInjection und habe zum Beispiel ein Configuration-Interface, das von der Klasse PropertiesConfig implementiert wird.

Mein BasicModule sieht also wie folgt aus:
Java:
public class BasicModule extends AbstractModule {
    @Override
    protected void configure() {
        bindListener(Matchers.any(), new Slf4jTypeListener());
        bind(Configuration.class).to(PropertiesConfig.class).in(Scopes.SINGLETON);
        bind(Discord.class).to(PzDiscord.class).in(Scopes.SINGLETON);
        bind(DiscordCommandManager.class).to(PzDiscordCommandManager.class);

    }
}
In allen Klassen funktioniert das Injecten ohne Probleme, aber ich habe eine Listener-Klasse, die von net.dv8tion.jda.api.hooks.ListenerAdapter erbt (dabei handelt es sich um JDA, eine API für Discord-Bots).

Hier sind alle injezierten Felder null.
Hier die Klasse, die nicht funktioniert:
Java:
public class PzDiscordListener extends ListenerAdapter {

    @InjectLogger
    private Logger logger;

    @Inject
    private Configuration config;

    @Inject
    private DiscordCommandManager discordCommandManager;

    PzDiscordListener() {
    }

    @Override
    public void onReady(@Nonnull ReadyEvent event) {
        System.out.println(logger);    //=> null
        System.out.println(config);    //=> null
        logger.info("PzDiscoB discord bot is ready: {}", event.getJDA().getSelfUser().getAsTag());    //=> NullPointerException wegen logger
    }
}
In anderen Klassen kann ich aber ganz normal auf die injezierten Felder zugreifen.
Beispiel:
Java:
public class PzDiscord implements Discord {

    @InjectLogger
    private Logger logger;

    @Inject
    private Configuration config;

    @Inject
    private DiscordCommandManager discordCommandManager;

    public PzDiscord() {

    }

    public void login() throws LoginException {
        logger.info("PzDiscord module is booting up");
        logger.debug("prefix: {}", config.get("prefix"));
        JDABuilder jdaBuilder = JDABuilder.createDefault(config.get("discord.token"));
        jdaBuilder.addEventListeners(new PzDiscordListener());
        jdaBuilder.setActivity(Activity.playing("Killing zeds"));
        jdaBuilder.build();
    }
}
Was mache ich denn hier falsch?
 
sascha-sphw

sascha-sphw

So aus dem Bauch heraus würde ich sagen die Instanz der Klasse wird nicht über den Injector von Guice erstellt.

Wie wird den die Instanz erstellt?
 
Thema: 

Guice Injection nicht in jeder Klasse möglich

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben