Java 在Spring中使用@Autowired annotation时,我应该如何解决以下错误?
我是Spring新手,在尝试使用@Autowired注释时遇到了一些问题,在尝试将存储库类注入PostController时遇到了一些问题Java 在Spring中使用@Autowired annotation时,我应该如何解决以下错误?,java,spring,spring-boot,Java,Spring,Spring Boot,我是Spring新手,在尝试使用@Autowired注释时遇到了一些问题,在尝试将存储库类注入PostController时遇到了一些问题 @Controller @RequestMapping("/posts") public class PostController { @Autowired private Repository repository; @RequestMapping(value="",method= RequestMethod.GET)
@Controller
@RequestMapping("/posts")
public class PostController {
@Autowired
private Repository repository;
@RequestMapping(value="",method= RequestMethod.GET)
public String listPosts(Model model){
model.addAttribute("posts",repository.findAll());
return "posts/lists";
}
}
public interface Repository extends CrudRepository<Posts,Long> {
}
这些是我收到的错误消息
线程主org.springframework.beans.factory.BeanCreationException中出现异常:创建名为“postController”的bean时出错:自动连线依赖项的注入失败;嵌套异常为org.springframework.beans.factory.beancreatitionException:无法自动关联字段:private domain.Repository controllers.PostController.Repository;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[domain.Repository]的符合条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowiredrequired=true}
位于org.springframework.beans.factory.annotation.AutowiredNotationBeanPostProcessor.PostProcessPropertyValue SautowiredNotationBeanPostProcessor.java:334
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBeanAbstractAutowireCapableBeanFactory.java:1208
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBeanAbstractAutowireCapableBeanFactory.java:537
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanAbstractAutowireCapableBeanFactory.java:476
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObjectAbstractBeanFactory.java:303
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingletonDefaultSingletonBeanRegistry.java:230
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBeanAbstractBeanFactory.java:299
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBeanAbstractBeanFactory.java:194
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleTonsDefaultListableBeanFactory.java:755
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitializationAbstractApplicationContext.java:759
位于org.springframework.context.support.AbstractApplicationContext.refreshAbstractApplicationContext.java:480
位于org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refreshEmbeddedWebApplicationContext.java:117
位于org.springframework.boot.SpringApplication.refreshSpringApplication.java:689
位于org.springframework.boot.SpringApplication.runSpringApplication.java:321
位于org.springframework.boot.SpringApplication.runSpringApplication.java:969
位于org.springframework.boot.SpringApplication.runSpringApplication.java:958
在MyApplication.mainMyApplication.java:7
原因:org.springframework.beans.factory.BeanCreationException:无法自动关联字段:private domain.Repository controllers.PostController.Repository;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[domain.Repository]的符合条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowiredrequired=true}
位于org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.InjectAutoWiredNotationBeanPostProcessor.java:561
位于org.springframework.beans.factory.annotation.InjectionMetadata.InjectionMetadata.java:88
位于org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValuesAutowiredAnnotationBeanPostProcessor.java:331
... 还有16个
原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[domain.Repository]的符合条件的bean:应至少有1个bean符合此依赖项的autowire候选项的条件。依赖项注释:{@org.springframework.beans.factory.annotation.Autowiredrequired=true}
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.RaiseNouchBeanDefinitionExceptionDefaultListableBeanFactory.java:1301
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependencyDefaultListableBeanFactory.java:1047
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependencyDefaultListableBeanFactory.java:942
位于org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.InjectAutoWiredNotationBeanPostProcessor.java:533
... 还有18个
您必须创建自己的存储库并从存储库扩展它,现在您使用的是spring存储库接口
@Repository
public interface PostRepository extends CrudRepository<Posts,Long> {
}
查看您的日志,我建议您验证两点: 是用@C注释的domain.Repository吗 成分? 如果应用程序启动到controllers包中,它将只解析controllers包下面的类,这不包括存储库所在的域包
对于第二点快速修复,您可以重新排列myapp包下的包,并让spring应用程序开始形成该级别的类,或者更多对于良好实践jpa、hibernate,尤其是为了更好地处理持久性异常,您必须将@Repository注释添加到所有存储库中
@Repository
public interface PostRepository extends CrudRepository<Posts,Long> {
}
还要提到,作为一种良好的实践,您创建了一个服务来处理使用存储库的流程的所有逻辑。这里的异常是NosuchbeAndDefinitionException 基于 有许多可能导致这种例外。请通读此详细说明以了解完整情况。->
是否使用设定器?或者将其声明为对构造函数的依赖关系?使用@repository注释存储库,但为interfaceAgree选择不同的更具体的名称使用@Erwin Bolwidt请使用@repository注释存储库接口,并更改存储库接口名称,如PostsRepository
@Repository
public interface PostRepository extends CrudRepository<Posts,Long> {
}
@Autowired
PostRepository postRepository;
public class NoSuchBeanDefinitionException
extends BeansException
Exception thrown when a BeanFactory is asked for a bean instance for which it cannot find a definition. This may point to a non-existing bean, a non-unique bean, or a manually registered singleton instance without an associated bean definition.