Java Spring@ComponentScan注释不';行不通
我有spring boot应用程序示例和包布局:Java Spring@ComponentScan注释不';行不通,java,spring,spring-java-config,spring-mongodb,component-scan,Java,Spring,Spring Java Config,Spring Mongodb,Component Scan,我有spring boot应用程序示例和包布局: main: -com.foo Application.java -com.foo.services ItemService.java ItemRepository.java -com.foo.config Configuration.java test: -com.foo.services ItemServiceIngegrationTest.java 我的集成测试无
main:
-com.foo
Application.java
-com.foo.services
ItemService.java
ItemRepository.java
-com.foo.config
Configuration.java
test:
-com.foo.services
ItemServiceIngegrationTest.java
我的集成测试无法运行,无法找到ItemRepository bean
如果放
但如果我把
@ComponentScan(basePackageClasses = { Application.class })
诀窍在哪里?
说明书上说:
basePackageClasses()或basePackages()(或其别名值())
可以指定来定义要扫描的特定包。如果具体
未定义包,将从
声明此批注的类
javadoc说:
如果未定义特定的包,将从声明此注释的类的包进行扫描
因此,除非定义了特定的包类,否则它将从声明
ComponentScan
的包中进行扫描。能否将其放入应用程序类中?如果将其定义为驻留在较低级别的包中的应用程序,则它可以工作,但如果在较高级别的包中定义它,则无法工作。您将其定义为的包是父包
包,它扫描所有子包
包。是的,我知道它适用于应用程序-我的描述中说明了这一点:)。我的观点是,根据规范,它甚至应该与子包一起工作。是的,我同意。根据文档,您的两个注释似乎都应该找到ItemRepository bean。
@ComponentScan(basePackageClasses = { Application.class })
@EnableAutoConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { Configuration.class })
public class ItemServiceIntegrationTest {
. . .
}
@org.springframework.context.annotation.Configuration
@PropertySource("classpath:application.properties")
@ComponentScan(basePackageClasses = { ItemService.class })
public class Configuration extends AbstractMongoConfiguration {
. . .
}