Spring을 사용하여 수동으로 만든 객체의 종속성을 해결하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1805021

  •  05-07-2019
  •  | 
  •  

문제

스프링을 사용하여 프로그램에서 수동으로 만든 객체의 종속성을 해결할 수 있는지 알고 싶습니다. 다음 수업을 살펴보십시오.

public class TestClass {

   private MyDependency md;

   public TestClass() {
   }

   ...

   public void methodThaUsesMyDependency() {
      ...
      md.someMethod();
      ...
   }

}

이 테스트 클래스는 스프링 콩이 아니지만, 마비 의존성, 즉 스프링 콩이 필요합니다. 코드 안에 새 연산자와 함께 테스트 클래스를 인스턴스화하더라도 봄을 통해이 종속성을 주입 할 수있는 방법이 있습니까?

감사

도움이 되었습니까?

해결책

편집하다: 아래의 원래 답변에서 설명하는 방법은 컨테이너의 외부를 달성하는 일반적인 방법입니다. 귀하의 특정 요구에 대해 - 테스트 - DJ의 답변에 동의합니다. 예를 들어 Spring의 테스트 지원을 사용하는 것이 훨씬 더 적절합니다.

@Test
@ContextConfiguration(locations = { "classpath*:**/applicationContext.xml" })
public class MyTest extends AbstractTestNGSpringContextTests {

    @Resource
    private MyDependency md;

    @Test
    public void myTest() {
            ...

위의 예는 TestNG 테스트이지만 Junit 지원이 설명되어 있습니다. 8.3.7.2. 컨텍스트 관리 및 캐싱.


일반적인 접근: 수업에 주석을 달다 @configurable SAGON LOAD TIME 또는 COMPILE TIME 직조를 활용합니다. 보다 6.8.1 AOP의 스프링 문서에서 자세한 사항은.

그런 다음 인스턴스 변수에 주석을 달 수 있습니다 @자원 또는 @autowired. 그들은 동일한 의존성 주입 목표를 달성하지만 사용하는 것이 좋습니다. @자원 스프링 특정보다는 Java 표준이므로.

마지막으로, 사용을 고려해야합니다 과도 현상 키워드 (또는 @과도 현상 JPA의 경우) 향후 물체를 직렬화하거나 지속하려는 경우. DI 'DID 리포지토리, 서비스 또는 구성 요소 Bean에 대한 참조를 직렬화하고 싶지 않을 가능성이 있습니다.

다른 팁

참조 Autowire () 방법에 대한 방법 AutowireCapableBeanFactory 수업. 당신이 사용하는 경우 ClasspathXmlApplicationContext, 당신은 공장을 얻을 수 있습니다 getAutoweRecapableBeanFactory ()

ApplicationContext를 얻으려면 정적 싱글 톤 또는 JNDI 또는 서블릿 컨테이너와 같은 다른 중앙 저장소를 사용해야합니다. 보다 defaultLocatorFactory ApplicationContext 인스턴스를 얻는 방법에 대해

필요한 것이 테스트 목적으로 사용되면 Spring은 위에서 설명한 시나리오를 잘 지원합니다.

체크 아웃 테스트에 대한 스프링 참조 설명서 섹션

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top