Итак, я столкнулся с этой проблемой, о которой даже не подозревал.
До сих пор я понимаю, что JVM идентифицирует класс с помощью комбинации имени класса, имени пакета и имени загрузчика классов. Я подтвердил, что все эти 3 совпадают, и все же я получаю ClassCastException.
@Component
public class SomeBean(){
//this is my service
}
Я могу успешно внедрить его, используя пружинное автоматическое подключение моих классов, где я внедряю его в контекст Кварцевого планировщика, который выглядит примерно так:
scheduler.getContext().put("Key",SomeBeanInstance);
Я пытаюсь получить этот bean-компонент внутри метода execute моей Quartz Job, который примерно выглядит следующим образом:
SomeBean someBeanInstance = (SomeBean) schedulerContext.get("key");
Это дает мне исключение приведения класса по типу:
cannot cast a.b.SomeBean to a.b.SomeBean
. Я проверил classLoader в своем классе, где вводят someBean и Quartz, и это одно и то же. Это RestartClassLoader (org.spring.devtools)
Как мне исправить эту проблему?
Есть ли лучший способ внедрить служебные бины в кварцевое задание?