Konnte nicht autowire Feld, aber ich habe die definition
Meine app-config.xml eine definition für meine UserDao bean:
<bean id="userDao" class="com.blah.core.db.hibernate.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
Habe ich meine Komponente Scannen:
<context:component-scan base-package="com.blah" />
Meiner index action in meinem HomeController funktioniert gut (es gibt den Inhalt einer Methode, die auf meine UserService zu einem freemarker template).
@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;
}
Den 'getTestUser()' ist eine neue Methode, die einen Bezug zu UserDao sieht es so aus:
@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();
}
}
Bin ich immer die Fehlermeldung:
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)}
- Was könnte das Problem sein?
- Wenn ich nicht tun autowire, was würde ich tun, anstatt die @AutoWire auf dem UserDao-definition.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, den Export aller eingetragenen Bohnen der Feder (oder Lesen Spring bootstrap-Protokoll oder den Speicher über den debugging), um herauszufinden, ob die
userDao
bean ist in der Liste. Bitte stellen Sie sicher, dassUserDaoImpl
ist wirklich die UmsetzungUserDao
zu - ich bin zeigt auf das da bin nicht zu sehen, das snippetUserDaoImpl
hier.Wenn Sie nicht
@Autowired
, die alternative wird sein, die ausdrücklich den Erhalt einer Referenz auf die bean durch Datei ApplicationContext ist getBean() (die als eine schmutzige Art und Weise, fixieren Sie Ihre@Autowired
statt), über seine bean-name, Klasse, name, etc.