导航至'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
相关产品推荐
相关产品推荐

