2010-11-29 2 views
3

최근에 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 클래스 내에서 인구가되었습니다. 누군가가 일하기 위해 이것이 콩이되어야하는 이유를 설명 할 수 있습니까?

+1

어떻게 '저장소'를 얻을 수 있습니까? 그것은 봄 콩인가? – axtavt

+0

아니요, 저장소가 Spring bean이 아닙니다. 내 테스트는 실제로 클래스를 인스턴스화하고 Repository 클래스를 인스턴스화합니다. 이 인스턴스화는 모두 프로그래밍 방식으로 수행됩니다. – Samo

+0

Repository를 Spring bean으로 바꿨다. 이것이 작동하기 위해서는 왜 bean인지 알아야합니다. * 스크래치 헤드 * – Samo

답변

3

자신을 Repository으로 인스턴스화하면 Spring이 관련되지 않고 종속성이 주입되지 않습니다. 그것은 마술처럼 생기지 않습니다. Spring은 어떤 식 으로든 루프에 있어야합니다. 인스턴스는 Spring 처리 계층을 통과해야하며 직접 인스턴스화하면 인스턴스가이를 막습니다.

+0

이 클래스는 응용 프로그램 코드에서 직접 인스턴스화되지만 종속성은 올바르게 주입됩니다. 이 두 시나리오에서 내가 알고있는 유일한 차이점은 응용 프로그램이 실행 중일 때 applicationContext가 web.xml에 의해로드된다는 것입니다.그러나 나는 봄에 익숙하지 않기 때문에 내가 모르는 다른 차이점이있을 수있다. 이 점에 대해 명확하게 설명해 주시면 감사하겠습니다. 봄을 더 잘 이해하고 싶습니다. – Samo

관련 문제