예제 4-3에서는 engine과 documentDAO 빈에 prototype 값을 가진 scope 속성을 추가했다. 스프링 컨테이너는 애플리케이션 컨텍스트의 getBean 메서드가 호출될 때 이들 클래스의 새로운 인스턴스를 생성한다. 테스트를 다시 수행하면 다음과 같은 출력을 볼 수 있다.1
$ gradle -Dtest.simple=MyDocumentsTest test
:compileJava UP-TO-DATE
:processResources
:classes
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test
com.apress.isf.spring.test.MyDocumentsTest > testAll STARTED
2014-07-30 01:33:53,180 DEBUG [Test worker] SearchEngineService created: com.apress.isf.spring.service.SearchEngineService@2fa125b4
2014-07-30 01:33:53,228 DEBUG [Test worker] Document DAO set: com.apress.isf.spring.data.DocumentRepository@79ec9ca0
2014-07-30 01:33:53,228 DEBUG [Test worker] SearchEngineService created: com.apress.isf.spring.service.SearchEngineService@50cbf10a
2014-07-30 01:33:53,229 DEBUG [Test worker] Document DAO set: com.apress.isf.spring.data.DocumentRepository@4bbdfa8a
com.apress.isf.spring.test.MyDocumentsTest > testAll PASSED
BUILD SUCCESSFUL
Total time: 7.57 secs
출력 결과에서 볼 수 있듯이 engine을 얻으려고 getBean 메서드를 두 번 호출하며, 매번 새로운 인스턴스를 얻으므로 이제 서로 다른 인스턴스를 가진다. documentDAO 세터도 마찬가지다.
1 역주: 이 테스트를 수행하는 데 필요한 빌드 파일은 부록 소스 코드에서 찾을 수 있다.