Не мог автосоединить поле проводом, но у меня есть определение

Мой app-config.xml имеет определение для моего боба UserDao:

  <bean id="userDao" class="com.blah.core.db.hibernate.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

У меня есть свое сканирование компонента:

<context:component-scan base-package="com.blah" />

Мое индексное действие в моем HomeController хорошо работает (это производит содержание метода на моем UserService к шаблону freemarker).

@Controller
public class HomeController {

    @Autowired
    private UserService userService;




    @RequestMapping("/")
    public ModelAndView Index() {



        ModelAndView mav = new ModelAndView();

        mav.setViewName("index");
        mav.addObject("message", userService.sayHello());

        mav.addObject("username", userService.getTestUser());


        return mav;
    }

'getTestUser ()' новый метод, который ссылается на UserDao, он похож:

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    UserDao userDao;

    public String sayHello() {

        return "hello from user service impl part 2";

    }

    public String getTestUser() {


        return userDao.getById(1L).getUsername();

    }


}

Я получаю ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.blah.core.db.hibernate.UserDao com.blah.core.services.UserServiceImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.blah.core.db.hibernate.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
  1. Какова проблема могла быть?
  2. Если я не сделал автопровода, что было бы я делать вместо того, чтобы добавить @AutoWire на определении UserDao.
7
задан Blankman 19 July 2010 в 00:49
поделиться

1 ответ

Пытались ли вы экспортировать все зарегистрированные bean-компоненты Spring (или читали журнал начальной загрузки Spring или память через отладку ), чтобы узнать, есть ли ] bean-компонент userDao находится в списке. Убедитесь, что UserDaoImpl действительно реализует UserDao - я указываю на это, потому что не вижу здесь фрагмента UserDaoImpl .

Если вы не используете @Autowired , альтернативой будет явное получение ссылки на bean-компонент через ApplicationContext getBean () (что считается грязным способом, исправьте @Autowired ), через имя компонента, имя класса и т. Д.

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

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