Я предполагаю, что существует несколько целей к типам того вида:
1) Они осуществляют ограничения на размер (и знак) переменных, которые могут быть сохранены в них.
2) Они могут добавить немного ясности для кодирования (например, если Вы используете символ, тогда любой читающий код знает то, что Вы планируете сохранить в нем).
3) Они могут сохранить память. если у Вас есть большой массив чисел, все из которых будут не подписаны и ниже 256, можно объявить его как массив байтов, сохранив некоторую память по сравнению с тем, если Вы объявили массив ints.
4) Вам нужно долго, если числа, которые необходимо сохранить, больше, чем 2^32 и двойное для очень больших чисел с плавающей точкой.
Я подозреваю, что если бы ProdMiscDAO
был интерфейсом (не так ли?), У вас не было бы этой ошибки. Я считаю, что у вас, вероятно, есть класс, который проксируется с использованием cglib под капотом, выполняет магию и т.д., и, в конце концов, он не может быть безопасно приведен к параметру в сеттере или конструкторе. Попробуйте запрограммировать интерфейс и посмотрите, исчезнет ли ошибка.
Обновление : ProdMiscDAO
не является интерфейсом. Это класс, который расширяет SqlMappedClientDaoSupport
.
Учитывая это, я рекомендую попробовать следующее:
ProdMiscDAO
в SqlMappedProdMiscDAO
. SqlMappedProdMiscDAO
с именем ProdMiscDAO
(например, « класс SqlMappedProdMiscDAO реализует ProdMiscDAO
») ProdMiscDAO
. SqlMappedProdMiscDAO
, подключив его ко всем классам, которые в нем нуждаются. Это позволяет реализовать вашу DAO. чтобы по-прежнему расширять SqlMappedClientDaoSupport
, но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.
SqlMappedProdMiscDAO
, и измените его на использование ProdMiscDAO
. SqlMappedProdMiscDAO
классы, которые в этом нуждаются. Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport
, но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.
SqlMappedProdMiscDAO
, и измените его на использование ProdMiscDAO
. SqlMappedProdMiscDAO
классы, которым он нужен. Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport
, но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.
Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport
, но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.
Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport
, но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.
Spring использует прокси, сгенерированные во время выполнения из интерфейсов, для выполнения таких операций, как транзакции, аспекты и т. Д. Правильная идиома Spring для таких объектов, как DAO, службы и т. Д. - начинать с интерфейс и создать конкретную реализацию. Как только у вас есть это, вы можете создавать прокси из интерфейса по мере необходимости.
Итак, конечно, у вас будет конкретная реализация DAO, и вы можете бесплатно расширить SqlMapClientDaoSupport, если хотите, но также создать интерфейс, который имеет ваши методы.
Убедитесь, что вам действительно нужно расширить SqlMapClientDaoSupport. Возможно, состав и делегирование - лучший способ.