Spring bean constructor-arg с универсальным - PullRequest
1 голос
/ 11 ноября 2011

Я позволю своему коду говорить за меня, во-первых, вот мой root-context.xml:

<context:component-scan base-package="it.trew.prove" />

<bean id="usersDao" class="it.trew.prove.model.dao.UsersDao" />

<bean id="usersService" class="it.trew.prove.server.services.UsersServiceImpl" />

Некоторые из моих пользователей dao:

public class UsersDao extends ObjectifyDao<User> {

    protected UsersDao(Class<User> clazz) {
        super(User.class);
    }

    static {
        ObjectifyService.register(User.class);
    }       
}

И мои пользователислужба (реализация):

public class UsersServiceImpl implements UsersService {

    private final UsersDao usersDao;

    @Autowired
    public UsersServiceImpl(UsersDao usersDao) {
        this.usersDao = usersDao;
    }

    @Override
    public List<User> listUsers() {
        return usersDao.list();
    }

    @Override
    public void saveUser(User user) {
        usersDao.add(user);
    }
}

Теперь мой журнал:

AVVERTENZA: вложено в org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании компонента с именем 'usersController'определено в файле [/home/fabio/stsworkspace/TestGAE/target/TestGAE-1.0-SNAPSHOT/WEB-INF/classes/it/trew/prove/web/UsersController.class]: неудовлетворенная зависимость, выраженная через аргумент конструктора с индексом 0 изтип [it.trew.prove.server.services.UsersService]:: Ошибка создания компонента с именем 'usersService', определенным в ресурсе ServletContext [/WEB-INF/spring/root-context.xml]: Неудовлетворенная зависимость, выраженная через аргумент конструктора синдекс 0 типа [it.trew.prove.model.dao.UsersDao]:: Ошибка создания бина с именем 'usersDao', определенным в ресурсе ServletContext [/WEB-INF/spring/root-context.xml]: создание объекта бинасветодиод;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса бина [it.trew.prove.model.dao.UsersDao]: не найден конструктор по умолчанию;вложенным исключением является java.security.PrivilegedActionException: java.lang.NoSuchMethodException: it.trew.prove.model.dao.UsersDao. ();вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем 'usersDao', определенным в ресурсе ServletContext [/WEB-INF/spring/root-context.xml]: сбой при создании экземпляра bean;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса бина [it.trew.prove.model.dao.UsersDao]: не найден конструктор по умолчанию;вложенным исключением является java.security.PrivilegedActionException: java.lang.NoSuchMethodException: it.trew.prove.model.dao.UsersDao. ();вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'usersService', определенным в ресурсе ServletContext [/WEB-INF/spring/root-context.xml]: несогласованная зависимость, выраженная через аргумент конструктора с индексом 0 ofтип [it.trew.prove.model.dao.UsersDao]:: Ошибка создания бина с именем 'usersDao', определенным в ресурсе ServletContext [/WEB-INF/spring/root-context.xml]: сбой при создании экземпляра бина;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса бина [it.trew.prove.model.dao.UsersDao]: не найден конструктор по умолчанию;вложенным исключением является java.security.PrivilegedActionException: java.lang.NoSuchMethodException: it.trew.prove.model.dao.UsersDao. ();вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем 'usersDao', определенным в ресурсе ServletContext [/WEB-INF/spring/root-context.xml]: сбой при создании экземпляра bean;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса бина [it.trew.prove.model.dao.UsersDao]: не найден конструктор по умолчанию;вложенным исключением является java.security.PrivilegedActionException: java.lang.NoSuchMethodException: it.trew.prove.model.dao.UsersDao. (): java.lang.NoSuchMethodException: it.trew.prove.model.dao.UsersDao ().

Итак ... по вашему честному мнению, как я могу изменить свой код, чтобы он работал правильно?

  • Извините за столь многословный:) -

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Добавьте аргумент конструктора в файл конфигурации

<bean id="usersDao" class="it.trew.prove.model.dao.UsersDao">
  <constructor value="it.trew.prove.model.dao.User" />
</bean>

или, что еще лучше, удалите бесполезный параметр из конструктора UserDao !

и добавьте autowire="constructor"для объявления бина службы пользователя.<bean id="usersService" class="it.trew.prove.server.services.UsersServiceImpl" autowire="constructor"/>

1 голос
/ 11 ноября 2011

Конструктор по умолчанию не найден; вложенным исключением является java.security.PrivilegedActionException: java.lang.NoSuchMethodException:

Просто добавьте конструктор по умолчанию

0 голосов
/ 11 ноября 2011
...