Исключение ClassCast, хотя класс, пакет и загрузчики классов одинаковы при использовании Quartz Scheduler - PullRequest
0 голосов
/ 05 июля 2018

Итак, я столкнулся с этой проблемой, о которой даже не подозревал. До сих пор я понимаю, что 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)

Как мне исправить эту проблему?

Есть ли лучший способ внедрить служебные бины в кварцевое задание?

1 Ответ

0 голосов
/ 05 июля 2018

Я не знаком с весной, но я собираюсь поговорить о кастинге в Java

A b = (c)d

Время компиляции проверка (1):

тип d и c должен иметь некоторое отношение, либо дочерний к родительскому, либо родительский к ребенок, или того же типа.

время компиляции проверка (2):

c должен быть того же или производного типа A.

Время выполнения проверка:

Тип объекта среды выполнения d должен быть одинаковым или производным типом c.

Примечание:

Полагаю, в вашем состоянии вы не выполнили последнюю проверку.

...