如何在 spring-servlet.xml 中自动装配 crud 存储库?

Posted

技术标签:

【中文标题】如何在 spring-servlet.xml 中自动装配 crud 存储库?【英文标题】:How to autowire crud repository in spring-servlet.xml? 【发布时间】:2017-09-01 02:08:52 【问题描述】:

当我们在 spring mvc 中使用 crud 存储库时出现以下错误

4352 [localhost-startStop-1] 错误 org.springframework.web.context.ContextLoader - 上下文初始化 失败的 org.springframework.beans.factory.BeanCreationException:创建名为“frCpbController”的bean时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.service.FrCpbManager com.act.group.internal.controller.FrCpbController.frCpbManager;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“FrCpbManager”的 bean 时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 引起:org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.service.FrCpbManager com.act.group.internal.controller.FrCpbController.frCpbManager;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“FrCpbManager”的 bean 时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:517) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) ... 22 更多 引起:org.springframework.beans.factory.BeanCreationException:错误 创建名为“FrCpbManager”的bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) ... 24 更多 引起:org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:517) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) ... 35 更多 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) ... 37 更多 2017 年 4 月 6 日 12:55:22 PM org.apache.catalina.core.StandardContext listenerStart 严重:向类的侦听器实例发送上下文初始化事件的异常 org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:创建名为“frCpbController”的bean时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.service.FrCpbManager com.act.group.internal.controller.FrCpbController.frCpbManager;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“FrCpbManager”的 bean 时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 引起:org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.service.FrCpbManager com.act.group.internal.controller.FrCpbController.frCpbManager;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“FrCpbManager”的 bean 时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:517) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) ... 22 更多 引起:org.springframework.beans.factory.BeanCreationException:错误 创建名为“FrCpbManager”的bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) ... 24 更多 引起:org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:com.act.group.internal.dao.FrCpbRepo com.act.group.internal.service.FrCpbManager.itemA;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:517) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) ... 35 更多 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:否 找到 [com.act.group.internal.dao.FrCpbRepo] 类型的合格 bean 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) ... 37 更多

请帮助我们解决上述问题。

【问题讨论】:

【参考方案1】:

您的问题不清楚,但如果您想在 spring MVC 项目中使用 CrudRepository:

1-创建接口:

@Repository
public interface UserDao extends CrudRepository<User, Long>


2-扫描存储库:

<jpa:repositories base-package="*****" />
    <tx:annotation-driven />

3-创建服务和服务Imp:

public interface UserService 

    public User findOne(Long id);
...

并在服务中使用带有注解@Resource 的存储库

@Service
public class UserServiceImpl implements UserService 
@Resource
    UserDao userRepository;
@Override
    public User findOne(Long id) 

        User user = userRepository.findOne(id);
        return user;
    

4-扫描服务:

<context:component-scan base-package="*****" />

5-自动装配服务并在控制器中使用它:

@Controller
@RequestMapping("/")
public class LoginController 

    @Autowired
    private UserService userService;
...

【讨论】:

以上是关于如何在 spring-servlet.xml 中自动装配 crud 存储库?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Framework中applicationContext.xml和spring-servlet.xml的区别

Spring Framework中applicationContext.xml和spring-servlet.xml的区别

web.xml 中spring-servlet.xml 和 application.xml 配置位置及含义

spring-servlet.xml简单示例

spring-servlet.xml

applicationcontext.xml和spring-servlet.xml怎么配置