4

コードや@Autowiredプロトタイプ スコープの Bean をシングルトン スコープの Bean に間違えることがあります。シングルトンはおそらくその依存関係をシングルトンでもあるかのように使用するため、これはもちろん間違っています。

これを検出してエラーを発生させるために、自動配線/DI プロセスを傍受する方法はありますか? これは、開発時の検出用です。

4

1 に答える 1

1

これを達成する最善の方法は、単体テストを使用することです。例えば:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyAppConfig.class, loader = AnnotationConfigContextLoader.class)
public class MyServiceTest {

    @Autowired(required = true)
    MyService myService;

    @Test 
    public void shouldAutowire() {}

}

@ContextConfiguration は、上記の Java 構成で使用することも、XML 構成ファイルを参照することもできます。これにより、テストを実行するたびにすべての依存関係を注入するために Spring が使用されます。@Autowired Bean に「required = true」を含めることで、Spring がそのフェーズで例外をスローし、テストが失敗することが保証されます。上記の例は見栄えが悪いかもしれませんが、構成エラーが確実にキャッチされます。もちろん、さらに進んで、テストで注入された Bean を利用することもできます。データベースアクセスの統合テストにはかなり便利だと思います。

これは自動配線プロセス自体を傍受していませんが、もちろん、Bean が正しく動作していることをテストできます。

spring-test 依存関係をインポートする必要があります。つまり、Maven の場合:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    <scope>test</scope>
</dependency>
于 2013-11-07T14:32:11.780 に答える