Мои классы обслуживания в моей весенней программе MVC все еще нулевые при запуске приложения Оба класса являются @Service и имеют @Autowired в классе контроллера, но все еще имеют значение null. Я просмотрел несколько дней, и все, что я нашел, - это две причины, ни одна из которых (я считаю) не относится к моим обстоятельствам.
Загрузочное приложение Spring пытается создать диск-бот, автоматическое подключение не работает в контроллере или тесте Junit (NPE при выполнении, а переменная показывает ноль при отладке).
Класс вождения:
package com.deth;
//imports
@SpringBootApplication
public class DethBotApplication {
private static Logger logger = Logger.getLogger(DethBotApplication.class);
@Autowired
private static BotCommandListener botListener;
public static void main(String[] args) {
SpringApplication.run(DethBotApplication.class, args);
try {
JDA jda = new JDABuilder(AccountType.BOT)
.setToken(TOKEN)
//.addEventListener(command controller)
.addEventListener(botListener)
.build(); //starts listening in discord server.
Соответствующий код контроллера:
package com.deth.controller;
//imports
@Component
public class BotCommandListener extends ListenerAdapter {
private static Logger logger = Logger.getLogger(BotCommandListener.class);
@Autowired
@Qualifier("raidAdminService")
private RaidAdminService raidAdminService;
@Autowired
private RaidRosterServiceImpl raidRosterService;
@Autowired
private RaidAttendanceService raidAttendanceService;
@Override
public void onMessageReceived(MessageReceivedEvent event) {
JDA jda = event.getJDA();
String msg = event.getMessage().getContentDisplay();
if(msg.startsWith("!")) {
String command = "";
if(!msg.contains(" ")) {
command = msg;
} else {
command = msg.subSequence(0, msg.indexOf(" ")).toString();
logger.trace("possible command: " + command);
}
try {
switch (command) {
//raid leader commands
case "!open":
raidAdminService.createRaid(event); //NPE here
logger.trace("!open detected");
break;
raidAdminService:
package com.deth.service;
//imports
@Service("raidAdminService")
public class RaidAdminServiceImpl extends CommandInfoService implements RaidAdminService {
String intRegex = "[0-9]+";
@Override
public void createRaid(MessageReceivedEvent event) {
// TODO Auto-generated method stub
структура пакета:
- ком
- Deth
- DethBotApplication
- Контроллер
- Услуги
- RaidAdminService (интерфейс)
- RaidAdminServiceImpl (класс)
....
когда программа запущена и работает, отправьте «! Open» на дискорд-сервер, правильно нажав на оператор switch и попытавшись вызвать метод createRaid, но RaidAdminService не был подключен автоматически, поэтому его вызов метода равен нулю.