Spring - странная ошибка в бобовом создании

Я предполагаю, что существует несколько целей к типам того вида:

1) Они осуществляют ограничения на размер (и знак) переменных, которые могут быть сохранены в них.

2) Они могут добавить немного ясности для кодирования (например, если Вы используете символ, тогда любой читающий код знает то, что Вы планируете сохранить в нем).

3) Они могут сохранить память. если у Вас есть большой массив чисел, все из которых будут не подписаны и ниже 256, можно объявить его как массив байтов, сохранив некоторую память по сравнению с тем, если Вы объявили массив ints.

4) Вам нужно долго, если числа, которые необходимо сохранить, больше, чем 2^32 и двойное для очень больших чисел с плавающей точкой.

7
задан sjngm 18 August 2011 в 14:56
поделиться

2 ответа

Я подозреваю, что если бы ProdMiscDAO был интерфейсом (не так ли?), У вас не было бы этой ошибки. Я считаю, что у вас, вероятно, есть класс, который проксируется с использованием cglib под капотом, выполняет магию и т.д., и, в конце концов, он не может быть безопасно приведен к параметру в сеттере или конструкторе. Попробуйте запрограммировать интерфейс и посмотрите, исчезнет ли ошибка.

Обновление : ProdMiscDAO не является интерфейсом. Это класс, который расширяет SqlMappedClientDaoSupport .

Учитывая это, я рекомендую попробовать следующее:

  1. Переименовать ProdMiscDAO в SqlMappedProdMiscDAO .
  2. Извлеките интерфейс из SqlMappedProdMiscDAO с именем ProdMiscDAO (например, « класс SqlMappedProdMiscDAO реализует ProdMiscDAO »)
  3. Пройдите через [ваш код 11438] SqlMappedProdMiscDAO и измените его на использование ProdMiscDAO .
  4. Настройте spring для создания экземпляра SqlMappedProdMiscDAO , подключив его ко всем классам, которые в нем нуждаются.

Это позволяет реализовать вашу DAO. чтобы по-прежнему расширять SqlMappedClientDaoSupport , но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.

)
  • Просмотрите весь свой код, который использует SqlMappedProdMiscDAO , и измените его на использование ProdMiscDAO .
  • Настройте Spring для создания экземпляра SqlMappedProdMiscDAO классы, которые в этом нуждаются.
  • Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport , но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.

    )
  • Просмотрите весь свой код, который использует SqlMappedProdMiscDAO , и измените его на использование ProdMiscDAO .
  • Настройте spring для создания экземпляра SqlMappedProdMiscDAO классы, которым он нужен.
  • Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport , но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.

    Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport , но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.

    Это позволяет вашей реализации DAO по-прежнему расширять SqlMappedClientDaoSupport , но также иметь интерфейс. После переключения всех классов на использование интерфейса вместо класса Spring не нужно будет использовать cglib для проксирования вашего DAO, и ошибка должна исчезнуть.

    18
    ответ дан 6 December 2019 в 08:15
    поделиться

    Spring использует прокси, сгенерированные во время выполнения из интерфейсов, для выполнения таких операций, как транзакции, аспекты и т. Д. Правильная идиома Spring для таких объектов, как DAO, службы и т. Д. - начинать с интерфейс и создать конкретную реализацию. Как только у вас есть это, вы можете создавать прокси из интерфейса по мере необходимости.

    Итак, конечно, у вас будет конкретная реализация DAO, и вы можете бесплатно расширить SqlMapClientDaoSupport, если хотите, но также создать интерфейс, который имеет ваши методы.

    Убедитесь, что вам действительно нужно расширить SqlMapClientDaoSupport. Возможно, состав и делегирование - лучший способ.

    4
    ответ дан 6 December 2019 в 08:15
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: