单元测试非常慢,因为spring类路径扫描会扫描多次相同的包

时间:2016-08-07 13:04:26

标签: java spring unit-testing junit spring-data

将Spring 3与spring数据一起使用,我有一个包com.company.repository,其中包含与spring数据库相关的所有类(大约50个类)。

组件扫描声明为:

<context:component-scan base-package="com.company"/>

在我的单元测试中,扫描弹簧组件的步骤非常长(约10秒)。 启用跟踪日志后,我注意到软件包&#34; com.company.repository&#34;被扫描多次。 实际上,方法ClassPathScanningCandidateComponentProvider.findCandidateComponents(&#34; com.company.repository&#34;)被调用多次并具有相同的值。 我不明白为什么会有这种行为。 我不会通过自定义实现覆盖它(或者我不知道如何做到这一点)。 而且我不明白为什么默认实现中没有缓存?

有人知道我为什么会有这种行为?这是正常的吗?

在补充中,以下是与我的案例相关的堆栈:

ClassPathScanningCandidateComponentProvider.findCandidateComponents(String) line: 224   
RepositoryBeanDefinitionBuilder.detectCustomImplementation(BeanDefinitionRegistry, ResourceLoader) line: 154    
RepositoryBeanDefinitionBuilder.registerCustomImplementation(BeanDefinitionRegistry, ResourceLoader) line: 116  
RepositoryBeanDefinitionBuilder.build(BeanDefinitionRegistry, ResourceLoader) line: 97  
RepositoryBeanDefinitionParser.registerGenericRepositoryFactoryBean(RepositoryConfiguration<XmlRepositoryConfigurationSource>, ParserContext) line: 101 
RepositoryBeanDefinitionParser.parse(Element, ParserContext) line: 71   
JpaRepositoryNameSpaceHandler(NamespaceHandlerSupport).parse(Element, ParserContext) line: 73   
BeanDefinitionParserDelegate.parseCustomElement(Element, BeanDefinition) line: 1419 
BeanDefinitionParserDelegate.parseCustomElement(Element) line: 1409 
DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element,  BeanDefinitionParserDelegate) line: 184  
...
XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource, Resource) line: 390

1 个答案:

答案 0 :(得分:1)

也许您的测试配置为在每次测试后创建和销毁您的spring上下文。 检查测试基础配置。