No matching bean of type [com.spw.service.UserService] found for dependency

在spring开发过程中遇到了这个错误,@Autowired自动化配置bean的项目启动的时候报错了

2016-8-3 23:02:04org.apache.catalina.core.StandardContext listenerStart
严重: Exception sendingcontext initialized event to listener instance of classorg.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Errorcreating bean with name 'userloginController' defined in file[E:\workspacce\.metadata\.me_tcat\webapps\spw\WEB-INF\classes\com\spw\controller\UserloginController.class]:Unsatisfied dependency expressed through constructor argument with index 0 oftype [com.spw.service.UserService]: : No matching bean of type[com.spw.service.UserService] found for dependency: expected at least 1 beanwhich qualifies as autowire candidate for this dependency. Dependencyannotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: Nomatching bean of type [com.spw.service.UserService] found for dependency:expected at least 1 bean which qualifies as autowire candidate for thisdependency. Dependency annotations: {}
    atorg.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
    atorg.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
    atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
    atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
    atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
    atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    atorg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609)
    atorg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)
    atorg.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
    atorg.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    atorg.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
    atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
    atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
    atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
    atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    atorg.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    atorg.apache.catalina.core.StandardService.start(StandardService.java:516)
    atorg.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    atorg.apache.catalina.startup.Catalina.start(Catalina.java:566)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
    atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

出现这个问题大概的原因有

1:你的web.xml配置文件里面少了监听listener

2:是因为你的@<context:component-scan base-package=""/>或者@ComponentScan,@Component基础包没有包含到你自动化的bean对象

3:大概就是这两种原因可是我仔细查找了我的配置没有上面的错误,经研究发现是由于我的controller用的是@Controller创建的bean对象,而在service和dao层的实现类上面没有创建bean对象导致Controller找不到@Autowired注入的对象于是在service层IMPL实现的类上面添加了@service(”xxxservicel”)在dao层impl包下添加@Repository("xxDao")就好了!!!

在Spring框架中,`NoUniqueBeanDefinitionException` 异常通常在使用 `@Autowired` 或其他依赖注入方式时,Spring容器中存在多个符合类型要求的Bean,而Spring无法确定要注入哪个Bean时抛出。对于类型为 `com.xgame.service.RobotBaseService` 的bean不唯一,找到4个而非单个匹配bean的问题,可以采用以下几种解决方法: ### 使用 @Qualifier 注解 `@Qualifier` 注解可以与 `@Autowired` 一起使用,通过指定Bean的名称来明确要注入的Bean。 ```java import com.xgame.service.RobotBaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component public class SomeService { @Autowired @Qualifier("specificRobotBaseService") private RobotBaseService robotBaseService; // 其他代码 } ``` 在配置类中,为特定的 `RobotBaseService` 实现指定名称: ```java import com.xgame.service.RobotBaseService; import com.xgame.service.impl.SpecificRobotBaseServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean("specificRobotBaseService") public RobotBaseService specificRobotBaseService() { return new SpecificRobotBaseServiceImpl(); } // 其他 Bean 定义 } ``` ### 使用 @Primary 注解 `@Primary` 注解可以标记在某个Bean定义上,当存在多个符合类型的Bean时,Spring会优先选择被 `@Primary` 注解标记的Bean。 ```java import com.xgame.service.RobotBaseService; import com.xgame.service.impl.SpecificRobotBaseServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @Configuration public class AppConfig { @Bean @Primary public RobotBaseService specificRobotBaseService() { return new SpecificRobotBaseServiceImpl(); } // 其他 Bean 定义 } ``` ### 使用 @Resource 注解 `@Resource` 注解默认通过名称进行注入,而不是类型。可以使用 `name` 属性指定要注入的Bean的名称。 ```java import com.xgame.service.RobotBaseService; import javax.annotation.Resource; import org.springframework.stereotype.Component; @Component public class SomeService { @Resource(name = "specificRobotBaseService") private RobotBaseService robotBaseService; // 其他代码 } ``` ### 手动获取Bean 通过 `ApplicationContext` 手动获取指定名称的Bean。 ```java import com.xgame.service.RobotBaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @Component public class SomeService { @Autowired private ApplicationContext applicationContext; public void doSomething() { RobotBaseService robotBaseService = applicationContext.getBean("specificRobotBaseService", RobotBaseService.class); // 使用 robotBaseService 进行操作 } } ``` ### 调整Bean定义 检查配置类或组件扫描范围,确保只定义或扫描需要的 `RobotBaseService` 实现。可以通过调整 `@ComponentScan` 的范围,或者在配置类中只定义需要的Bean。 ```java import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(basePackages = "com.xgame.service.impl.specific") public class AppConfig { // 其他配置 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值