You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导航至'customers'页面时出现Spring依赖注入异常

这个问题很典型,就是Spring容器找不到你要自动装配的CrudEntityPresenter Bean,导致CustomersView没法通过构造函数注入依赖启动。核心异常就是这句:

org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为'com.nfg.crm.ui.crud.CrudEntityPresenter'的合格Bean:期望至少有1个符合自动装配候选条件的Bean。

给你几个排查和解决的方向:

  • 给CrudEntityPresenter添加Spring组件注解:如果这个类是你自己写的,要在类上加上@Component(通用组件)、@Service(业务逻辑类)这类注解,这样Spring在启动扫描的时候才会把它纳入容器管理,生成对应的Bean实例。
  • 确认组件扫描范围覆盖目标包:检查你的Spring Boot主启动类上的@SpringBootApplication注解,默认它只会扫描主类所在包及其子包。如果CrudEntityPresenter所在的com.nfg.crm.ui.crud不在这个范围内,就得手动添加@ComponentScan来指定扫描的包,比如:
    @SpringBootApplication
    @ComponentScan(basePackages = {"com.nfg.crm.ui"})
    public class YourCrmApplication {
        public static void main(String[] args) {
            SpringApplication.run(YourCrmApplication.class, args);
        }
    }
    
  • 如果是接口,确保有实现类并注解:要是CrudEntityPresenter是接口类型,那你必须有一个实现这个接口的类,并且给实现类加上组件注解,Spring才能找到具体的Bean来注入。
  • 检查是否有配置类漏掉了Bean定义:如果是通过@Configuration类里的@Bean方法来定义这个Bean的,要确认那个配置类被Spring扫描到,并且@Bean方法正确返回了CrudEntityPresenter的实例。

附上完整的异常栈信息方便你参考:

尝试导航至'customers'页面时发生异常,异常信息如下:
'创建名称为'com.nfg.crm.ui.views.customers.CustomersView'的Bean时出错:通过构造函数参数0表达的依赖不满足;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为'com.nfg.crm.ui.crud.CrudEntityPresenter'的合格Bean:期望至少有1个符合自动装配候选条件的Bean。依赖注解:{}' 
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'com.nfg.crm.ui.views.customers.CustomersView'的Bean时出错:通过构造函数参数0表达的依赖不满足;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到类型为'com.nfg.crm.ui.crud.CrudEntityPresenter'的合格Bean:期望至少有1个符合自动装配候选条件的Bean。依赖注解:{} 
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:729) 
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:304) 
at com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:86) 
at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:157) 
at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:114) 
at java.util.Optional.orElseGet(Optional.java:267) 
at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:113) 
at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:165) 
at com.vaadin.flow.router.Router.handleNavigation(Router.java:178) 
at com.vaadin.flow.router.Router.navigate(Router.java:150) 
at com.vaadin.flow.router.Router.initializeUI(Router.java:91) 
at com.vaadin.flow.component.UI.lambda$doInit$0(UI.java:205) 
at java.util.Optional.ifPresent(Optional.java:159) 
at com.vaadin.flow.component.UI.doInit(UI.java:205) 
at com.vaadin.flow.server.BootstrapHandler.createAndInitUI(BootstrapHandler.java:988) 
at com.vaadin.flow.server.BootstrapHandler.synchronizedHandleRequest(BootstrapHandler.java:388) 
at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) 
at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1541) 
at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:345) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:356) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316) 
at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) 
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) 
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applic...

内容的提问来源于stack exchange,提问作者Quân Nguyễn Hồng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:19:44