【问题标题】:Unsatisfied dependency expressed through constructor argument with index 0 of type通过类型索引为 0 的构造函数参数表示的不满足依赖关系
【发布时间】:2015-09-06 07:06:33
【问题描述】:

Spring 4.1.6.RELEASE 出现错误。

我不知道错误来自哪里。 Autowire 注释应该为我创建 bean。我还缺少什么其他注释?

这里是代码

控制器类

@Controller
@RequestMapping("/rest/accounts")
public class AccountController {

private AccountService accountService;

public AccountController() {}
@Autowired
public AccountController(AccountService accountService) {
    this.accountService = accountService;
}

存储库类

@Service
@Transactional
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountRepo accountRepo;

@Autowired
private BlogRepo blogRepo;

@Override
public Account findAccount(Long id) {
    return accountRepo.findAccount(id);
}

这里是错误

HTTP 状态 500 - servlet appServlet 的 Servlet.init() 抛出 异常

输入异常报告

servlet appServlet 的消息 Servlet.init() 抛出异常

描述服务器遇到阻止它的内部错误 完成此请求。

异常

javax.servlet.ServletException: Servlet.init() for servlet appServlet 抛出异常 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745) 根本原因

org.springframework.beans.factory.UnsatisfiedDependencyException: 创建文件中定义的名称为“accountController”的 bean 时出错 [/Users/Mayor/Documents/workspace/PascalWebStore/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/PascalWeb/WEB-INF/classes/com/sci/pascal/rest/mvc/ AccountController.class]: 通过构造函数参数表达的不满足的依赖关系 [com.sci.pascal.core.services.AccountService] 类型的索引 0::否 [com.sci.pascal.core.services.AccountService] 类型的限定 bean 找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。依赖注解:{}; 嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 [com.sci.pascal.core.services.AccountService] 类型的限定 bean 找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。依赖注释:{} org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1139) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1042) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745) 根本原因

org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 [com.sci.pascal.core.services.AccountService] 类型的限定 bean 找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。依赖注释:{} org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301) org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047) org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942) org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1139) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1042) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) javax.servlet.GenericServlet.init(GenericServlet.java:158) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:745) note 的完整堆栈跟踪 根本原因可在 Apache Tomcat/8.0.21 日志中找到。

感谢任何帮助。 谢谢。

【问题讨论】:

  • "No qualifying bean of type [com.sci.pascal.core.services.AccountService]" - 因此您需要将 AccountService 标记为 Bean,因为它目前不是 Bean。您还必须添加一个 XML 文件
  • AccountService 是一个接口,我在 AccountServiceImplementation 类中实现。我还在这个类上使用了服务注解,以便 spring 将其识别为 bean。但我仍然收到此错误 - 找不到类型为 [com.sci.pascal.core.services.AccountService] 的合格 bean 依赖项:预期至少有 1 个 bean 有资格作为依赖项的自动装配候选者。

标签: spring spring-mvc


【解决方案1】:

谢谢大家我发现错误spring没有找到配置文件 我包括了

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/business-config.xml</param-value>

在我的 web.xml 文件中。

【讨论】:

    【解决方案2】:

    在您的 spring-servlet.xml 文件中设置此属性。

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

    【讨论】:

    • 我已经这样做了。
    • 而且我还有大约 10 个控制器类,是否必须在 xml 中声明每个 bean 才能使用它?
    • 不,没有必要在 XML 中编写 bean,您可以使用 @controller 注解告诉编译器这是控制器类
    • 是的,我已经在类上有一个控制器注释。但仍然无法正常工作。我也 @autowire 这个控制器类的构造函数,比如这个 public AccountController(AccountService accountService) { this.accountService = accountService; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2018-10-27
    • 2019-11-09
    • 2017-09-24
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多