使用 Spring 3 和 spring 数据,我有一个包 com.company.repository,其中包含与 spring 数据存储库相关的所有类(大约 50 个类)。
组件扫描声明为:
<context:component-scan base-package="com.company"/>
在我的单元测试中,扫描 Spring 组件的步骤很长(大约 10 秒)。 启用跟踪日志后,我注意到包“com.company.repository”被多次扫描。 事实上,方法 ClassPathScanningCandidateComponentProvider.findCandidateComponents("com.company.repository") 被多次调用,并具有相同的值。 我不明白为什么我有这种行为。 而且我不会通过自定义实现覆盖它(或者我找不到如何做到这一点)。 而且我不明白为什么默认实现中没有缓存?
有人知道我为什么会有这种行为吗?正常吗?
作为补充,以下是与我的案例相关的堆栈:
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
最佳答案
也许您的测试配置为在每次测试后创建和销毁您的 spring 上下文。 检查您的测试基础配置。
关于java - 单元测试很慢,因为spring classpath扫描多次扫描同一个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38814434/