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:
In allen Klassen funktioniert das Injecten ohne Probleme, aber ich habe eine Listener-Klasse, die von
Hier sind alle injezierten Felder null.
Hier die Klasse, die nicht funktioniert:
In anderen Klassen kann ich aber ganz normal auf die injezierten Felder zugreifen.
Beispiel:
Was mache ich denn hier falsch?
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?