최근에 applicationContext에서 Bean을 가져 오는 것에 대해 this question에게 물었습니다. 대답은 참으로 도움이되었지만 이제는 테스트 외부의 클래스에서이 빈에 액세스하는 데 문제가있는 것으로 보입니다. 즉, 내 테스트는 응용 프로그램 컨텍스트에서 빈을 사용하는 클래스를 인스턴스화하지만이 빈은 null을 계속 유지합니다.그래서 지금 내 bean은 null입니까?
는내 테스트는 다음과 같이 응용 프로그램 컨텍스트를 설정합니다
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class SearcherTests {
내 테스트 프로그래밍 저장소 클래스를 인스턴스화
Repository searcher = new Repository();
내 저장소 클래스 다음의 멤버 변수가 있습니다
@Resource
private MyFactory myFactory;
을
스프링을 올바르게 이해했다면, 현재의 어플리케이션을보아야합니다. 콩에 대한 ation 컨텍스트. 테스트에 따르면, 현재 응용 프로그램 컨텍스트 myFactory
에 대한 정의를 포함 applicationContext-test.xml
,해야한다 : 미래에
<bean id="myFactory"
name="myFactory"
class="com.foo.Mocks"
factory-method="createMockFactory" />
을,이 팩토리 방법은 모의를 반환합니다. 내 브라우저에서 응용 프로그램을 실행하면
public class Mocks {
public static MyFactory createMockFactory() {
return new MyFactory();
}
}
의 myFactory
변수가 올바르게 applicationContext.xml
의 빈 정의에서 인스턴스화 :하지만 순간에, 그냥 일반 Factory
개체를 반환합니다. 내 테스트에서는 applicationContext-test.xml
이 작동하는지 확인하기 위해 Repository
클래스에서와 마찬가지로이 bean을 멤버 변수로 나열했습니다. 테스트를 실행하는 동안 테스트를 포함하는 파일의 myFactory
변수가 예상대로 정확하게 나타납니다. 그러나 Repository
클래스에 도달하면 해당 클래스의 myFactory
변수가 null입니다. 이 클래스가 의 bean 정의에 기반한 myFactory
변수를 인스턴스화하지 않는 것 같습니다. 누군가 왜 저에게 말할 수 있습니까? 그것은 봄 콩이되도록
업데이트 차라리 수동으로 Repository
클래스의 인스턴스보다는 searcher
변수를 변경, 지금은 myFactory
변수는 Repository
클래스 내에서 인구가되었습니다. 누군가가 일하기 위해 이것이 콩이되어야하는 이유를 설명 할 수 있습니까?
어떻게 '저장소'를 얻을 수 있습니까? 그것은 봄 콩인가? – axtavt
아니요, 저장소가 Spring bean이 아닙니다. 내 테스트는 실제로 클래스를 인스턴스화하고 Repository 클래스를 인스턴스화합니다. 이 인스턴스화는 모두 프로그래밍 방식으로 수행됩니다. – Samo
Repository를 Spring bean으로 바꿨다. 이것이 작동하기 위해서는 왜 bean인지 알아야합니다. * 스크래치 헤드 * – Samo