无法自动装配字段 spring-boot [英] could not autowire field spring-boot
问题描述
需要一些帮助,我刚刚开始学习 Spring,似乎无法弄清楚我们错在哪里:
Need some help, I am just starting to learn Spring and can't seem to figure out what us wrong:
Application.java - 无包
Application.java - no package
@Configuration
//@ComponentScan({"com.mapping","com.accesors","com.controllers"}) --Originaly tried this
@ComponentScan(basePackageClasses={UserDAO.class,Root.class,User.class})
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
User.java - 包 com.mapping
User.java - package com.mapping
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String userName;
private String password;
//accesors
}
UserDAO.java - 包 com.accesors
UserDAO.java - package com.accesors
@Repository
public interface UserDAO extends JpaRepository<User, Long> {
}
Root.java - 包 com.controllers
Root.java - package com.controllers
@Controller
@RequestMapping("/*")
public class Root {
@Autowired
UserDAO userDAO;
@RequestMapping("/")
@ResponseBody
public String rootAction(@RequestParam(defaultValue="foo") String name){
List<User> lst = this.userDAO.findAll();
for(User u : lst){
System.out.println(u);
}
return "hello, " + name;
}
}
当我运行项目时,我似乎得到了以下例外
And I seem to get the following exeption when I run the project
堆栈跟踪:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'root': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.accesors.UserDAO com.controllers.Root.userDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.accesors.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)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:120)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:952)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:941)
at demo.Application.main(Application.java:14)
据我所知,这意味着@ComponentScan 没有检测到包
From what I understand it means that @ComponentScan is not detecting the packages
推荐答案
如果您的 Spring Data 存储库不在 @EnableAutoConfiguration
类的子包中,则需要添加 @EnableJpaRepositories
(如果实体不在子包中,@EntityScan
也是如此).
If your Spring Data repositories are not in a sub-package of the @EnableAutoConfiguration
class then you need to add @EnableJpaRepositories
(and ditto for @EntityScan
if the entities are not in a sub-package).
这篇关于无法自动装配字段 spring-boot的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!