一、异常描述
基于spring-test的org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests进行项目单元测试时,运行调试Junit Test代码报"org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.test.TestBase': ..org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.test.CommonService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}..Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of ..",详情错误日志如下所示>>
十二月 13, 2018 1:44:49 上午 org.springframework.test.context.support.AbstractTestContextBootstrapper getTestExecutionListeners@b@信息: Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1689405, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@cdf3c2, org.springframework.test.context.support.DirtiesContextTestExecutionListener@13e5454]@b@十二月 13, 2018 1:44:50 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions@b@信息: Loading XML bean definitions from URL [file:/C:/xwood_net/project/other-project/SpringMvc4/WebRoot/WEB-INF/classes/springContext.xml]@b@十二月 13, 2018 1:44:50 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh@b@信息: Refreshing org.springframework.context.support.GenericApplicationContext@12eec98: startup date [Thu Dec 13 01:44:50 CST 2018]; root of context hierarchy@b@十二月 13, 2018 1:44:50 上午 org.springframework.test.context.TestContextManager prepareTestInstance@b@严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@cdf3c2] to prepare test instance [com.test.TestBase@a68e82]@b@org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.test.TestBase': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.test.CommonService com.test.TestBase.commonService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.test.CommonService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}@b@ at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)@b@ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)@b@ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:385)@b@ at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)@b@ at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)@b@ at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212)@b@ at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:200)@b@ at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:252)@b@ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)@b@ at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:254)@b@ at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217)@b@ at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83)@b@ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)@b@ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)@b@ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)@b@ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)@b@ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)@b@ at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)@b@ at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68)@b@ at org.junit.runners.ParentRunner.run(ParentRunner.java:363)@b@ at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163)@b@ at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)@b@ at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)@b@ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)@b@ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)@b@ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)@b@ at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)@b@Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.test.CommonService com.test.TestBase.commonService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.test.CommonService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}@b@ at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)@b@ at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)@b@ at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)@b@ ... 26 more@b@Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.test.CommonService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}@b@ at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)@b@ at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)@b@ at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)@b@ at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)@b@ ... 28 more
二、解决方法
因为项目spring的xml配置文件中没有加入”<context:component-scan base-package="com"></context:component-scan>“导致(完整配置过程及相关项目参考其他文章页)
<?xml version="1.0" encoding="UTF-8"?>@b@<beans xmlns="http://www.springframework.org/schema/beans"@b@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" @b@ xmlns:mvc="http://www.springframework.org/schema/mvc" @b@ xmlns:aop="http://www.springframework.org/schema/aop" @b@ xmlns:context="http://www.springframework.org/schema/context"@b@ xsi:schemaLocation="http://www.springframework.org/schema/beans@b@ http://www.springframework.org/schema/beans/spring-beans-4.1.xsd@b@ http://www.springframework.org/schema/context@b@ http://www.springframework.org/schema/context/spring-context-4.1.xsd">@b@@b@ <context:annotation-config /> @b@ <context:component-scan base-package="com"></context:component-scan>@b@@b@</beans>