Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring. Проблема с инициализацией бина. 
:(
    Опции темы
unreger
Дата 7.6.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2007
Где: Tomsk

Репутация: нет
Всего: нет



пытаюсь создать (Maven2 Spring Hibernate JPA TestNG) проект
проблема с инициализацией бина
simple тест работает
advanced выдает:
Код

.....
Bean property 'dictionaryDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
.....

Поискал конечно. Проблема встречается часто, но ответы в основном  - проверь есть ли сеттер. Но у меня-то он есть.

Тестовый класс
Код

@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class DictionaryPersonServiceTest {
    private static org.slf4j.Logger log = LoggerFactory.getLogger(DictionaryPersonServiceTest.class);

    private ApplicationContext appContext;
    
    @Test
    public void advanced() {
        appContext = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");

        IDictionaryService dictionaryService = (IDictionaryService) appContext.getBean("dictionaryPersonService");

        for (int i = 0; i < 5; i++) {
            dictionaryService.addHeader("header_" + i);
        }

        List lst = dictionaryService.getHeadersList();
        for (int i = 0; i < 5; i++) {
            DictionaryPerson item = (DictionaryPerson) (lst.get(i));
            log.debug(item.getItem());
        }
        
    }

    @Test(enabled = false)
    public void simple() {

        DictionaryPersonDaoImpl dictionaryPersonDaoImpl = new DictionaryPersonDaoImpl();
        DictionaryPersonServiceImpl dictionaryPersonServiceImpl = new DictionaryPersonServiceImpl();
        dictionaryPersonServiceImpl.setDictionaryDao(dictionaryPersonDaoImpl);

        for (int i = 0; i < 5; i++) {
            dictionaryPersonServiceImpl.addHeader("header_" + i);
        }

        List lst = dictionaryPersonServiceImpl.getHeadersList();
        for (int i = 0; i < 5; i++) {
            DictionaryPerson item = (DictionaryPerson) (lst.get(i));
            log.debug(item.getItem());
        }

    }
}


applicationContext.xml
Код

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <bean id="dictionaryPersonDao" class="nb.dao.person.DictionaryPersonDaoImpl"/>
    <bean id="dictionaryPersonService" class="nb.service.person.DictionaryPersonServiceImpl">
        <property name="dictionaryDao">
            <ref local="dictionaryPersonDao"/>
        </property>
    </bean>
</beans>


Интерфейс сервисного класса
Код

public interface IDictionaryService {
    public void setDictionaryDao (IDictionaryDao dao);

    public List getHeadersList();
.........
}

Реализация
Код

public class DictionaryPersonServiceImpl implements IDictionaryService {
    private IDictionaryDao dictionaryDao;
............

    public DictionaryPersonDaoImpl getDictionaryDao() {
        return (DictionaryPersonDaoImpl) dictionaryDao;
    }

    public void setDictionaryDao(IDictionaryDao dictionaryDao) {
        this.dictionaryDao = dictionaryDao;
    }

    public List getHeadersList() {
        return dictionaryDao.getHeaderList();
    }
.......
}

PM MAIL   Вверх
garbuz
Дата 7.6.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



У вас скорее всего какая-то путаница с классами
читаем 
http://forum.springsource.org/showthread.php?t=18525
http://forum.springsource.org/showthread.php?t=15522

Цитата

public interface IDictionaryService {
    public void setDictionaryDao (IDictionaryDao dao);
    public List getHeadersList();
.........
}

Сетить объекту свойство посредством реализации интерфейсного метода как-то не правильно, мне кажется... smile 
PM MAIL   Вверх
Старовъръ
Дата 7.6.2009, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Цитата
Сетить объекту свойство посредством реализации интерфейсного метода как-то не правильно, мне кажется...
В данном случае это оправдано, это класс-сервис, setDao() у него - основной метод. Бывает, что это единственный метод в EntitySerivce-интерфейсах smile А вот геттер для дао вообще нужно убрать, он там бесполезен. Может это из-за него ошибка, т.к. гет/сет методы не совпадают по типам? Ибо 
Цитата
Does the parameter type of the setter match the return type of the getter?
Вот это смущает..
Код
        <property name="dictionaryDao">
            <ref local="dictionaryPersonDao"/>
        </property>
Свойства легче устанавливать так:
Код
        <property name="dictionaryDao" ref="dictionaryPersonDao"/>

PM MAIL WWW   Вверх
unreger
Дата 8.6.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 14.6.2007
Где: Tomsk

Репутация: нет
Всего: нет



АААА!!!! Спасибо! Убрал геттер и все заработало!
Вот оно - зло автогенерации. 

Про установку свойств. Это я уже с горя развернул.
Есть способ еще лучше:
Код

<bean id="dictionaryPersonService" class="nb.service.person.DictionaryPersonServiceImpl" p:dictionaryDao-ref="dictionaryPersonDao"/>

особенно если свойств много.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.