2017-02-11 2 views
0

나는SpringCore - Bean을로드하기 위해 ApplicationContext obj를 만드는 대신 @ContextConfiguration을 사용하여 기본 클래스에 Bean을로드 할 수 있습니까?

@ContextConfiguration로드 및 통합 테스트를위한 ApplicationContext를 구성하는 방법을 결정하는 데 사용되는 클래스 수준의 메타 데이터를 정의 봄 문서에이 문장을 읽어 보시기 바랍니다.
특히 @ContextConfiguration은 컨텍스트를로드하는 데 사용되는 응용 프로그램 컨텍스트 리소스 위치 또는 주석이있는 클래스를 선언합니다.

그런 다음 나는 그러나 봄이 빈 정의를로드 할 수 없습니다, 클래스의 상단에있는 @ContextConfiguration을 넣어 주 클래스 (안 테스트 클래스)에서 응용 프로그램 컨텍스트를로드하려고합니다.

AppJavaBasedConfig는

@ContextConfiguration(classes=AppJavaBasedConfig.class) 
public class App { 

    @Autowired 
    private IStringUtil stringUtil; 

    public static void main(String[] args) { 
     // ApplicationContext context = new AnnotationConfigApplicationContext(AppJavaBasedConfig.class); 
     // App app = context.getBean(App.class); 
     App app = new App(); 
     app.stringUtil.lower("AAA"); 
    } 
} 

@Configuration 
public class AppJavaBasedConfig { 

    @Bean 
    public IStringUtil stringUtil() { 
     return new StringUtil(); 
    } 

    @Bean 
    public App app() { 
     return new App(); 
    } 
} 

홈페이지 그것은 NullPointerException이 발생합니다.

그래서 메인 클래스에서이 주석을 사용할 수 있습니까?

@Component 
public class App { 

    @Autowired 
    private IStringUtil stringUtil; 

    @PostConstruct 
    public void init() { 

     stringUtil.lower("AAA"); 
    } 
} 
+0

@ContextConfiguration은 통합 테스트에서 컨텍스트를로드하기위한 것입니다. 당신은 스테레오 타입 어노테이션이 아닌 다른 곳에서는 사용하지 말아야합니다. – Barath

답변

0

은 라이프 사이클이야 아니야. 그것은 개념적인 문제입니다. @Configuration으로 주석 처리 된 모든 bean을 Spring이로드 할 수 있습니다. 누가 스프링 컨테이너를 인스턴스화/시작하겠습니까?

당신이 가지고 있기 때문에 public static void main 최종 제품은 명령 줄에서 java -jar으로 실행되는 jar라고 가정합니다. 당신이 java -jar을 실행하려고 할 때

이 실행됩니다 방법입니다 public static void main (제공 당신이 모든 올바르게 매니페스트) 당신이 일을해야 할 첫 번째 일은 귀하의 질문에서 스프링 컨테이너 CRTL + C를 인스턴스화입니다

public static void main(String[] args) { 
    ApplicationContext context = new AnnotationConfigApplicationContext(AppJavaBasedConfig.class); 
    App app = context.getBean(App.class); 

} 

당신이 사용할 수있는 모든 것을하고 싶지 않다면 spring boot

+0

[테스트 무언가가] 내 목표가 아니지만, 빠른 응답을 주셔서 감사합니다. 정말 빈 정의를로드하고 싶습니다. Btw, 아마도이 주석의 기능에 대한 마지막 코멘트는이 경우에 고려되어야합니다. – doannx

1

짧은 대답 : 당신이 App.java에서 IStringUtil stringUtil이 필요하고 테스트 뭔가 당신이 빈 중에 호출 얻을 @PostContruct 또는 @Bean의 INIT-method 속성을 이용할 수있는 경우는`