3

パッケージ レイアウトのスプリング ブート アプリケーションのサンプルがあります。

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 = { ItemService.class })

しかし、私が置くと動作します

  @ComponentScan(basePackageClasses = { Application.class })

トリックはどこですか?

仕様は言う:

basePackageClasses() または basePackages() (またはその別名 value()) を指定して、スキャンする特定のパッケージを定義できます。特定のパッケージが定義されていない場合、このアノテーションを宣言するクラスのパッケージからスキャンが行われます。

@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 {
   .  .  .
}   
4

1 に答える 1

2

javadoc は次のように述べています。

特定のパッケージが定義されていない場合、このアノテーションを宣言するクラスのパッケージからスキャンが行われます。

ComponentScanそのため、特定のパッケージ クラスが定義されていない限り、宣言するパッケージからスキャンします。Applicationクラスに入れますか?

于 2016-02-21T04:35:20.047 に答える