Это похоже на проблему Spring / CGLIB, но проблема на самом деле в вашем конструкторе! Я предполагаю, что вы пытаетесь получить тип параметра, чтобы вы могли предоставить его менеджеру сущностей (или любой другой структуре постоянства, которую вы пытаетесь использовать). Я также предполагаю, что для этого вы вызываете getGenericSuperclass()
и приводите его к ParameterizedType?
Способ поведения метода зависит от класса. Оказывается, что не все объекты Class реализуют интерфейс ParameterizedType (что, я согласен, странно). Сгенерированные прокси CGLIB не хранят обобщенную информацию. Это выглядит примерно так:
public class SomeDAOImplProxy extends SomeDAOImpl
На самом деле я не знаю, почему прокси-серверы CGLIB не сохраняют дженерики, поскольку детали прокси-серверов CGLIB очень сложны. Возможно, это просто невозможно. Возможно также, что это не является для них приоритетом.
Вот простой эксперимент, который убирает Spring и CGLIB из картинки, но все равно получает эту ошибку.
public static void main(String [] args) {
List<Object> fooList = new ArrayList<Object>();
String fooString = "";
System.out.println((ParameterizedType)fooList.getClass().getGenericSuperclass());
System.out.println((ParameterizedType)fooString.getClass().getGenericSuperclass());
}