2012-04-13 3 views
2

실행중인 Spring 3 웹 응용 프로그램이 있습니다. 모든 콩은 올바르게 주입되고 모든 것이 제대로 작동합니다 (모든 웹 서비스 호출이 제대로 작동하고 있습니다).스프링 빈을 스레드에 삽입하는 방법

응용 프로그램을 확장하는 동안 시작할 수있는 스레드를 추가해야했습니다. &은 웹 서비스를 통해 중지되었습니다.

스레드에서 일부 스프링 빈을 주입해야합니다. 이 beens는 @Service로 주석 된 서비스입니다.

<context:component-scan base-package="<package>"> 
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
</context:component-scan> 

을하지만 (봄을 주입하지 않습니다) 그들은 항상 '널 (null)'인 스레드에서 콩 (@Resource를 사용)를 주입 할 때 내의 ApplicationContext에서 콩 성분 검사를 통해 감지됩니다. 스레드가 시작되었지만 초기화하는 동안 실패합니다.

나는 또한 코드에서 ApplicationContext를로드하여 그들에게 주입 시도 : 사람이 어떻게 스레드에서 콩을 주입하는 어떤 생각을 가지고 있습니까

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:*applicationContext.xml"); 

if(applicationContext.containsBean("BeanName")) { 

     beanObject = (BeanClass) applicationContext.getBean("BeanName"); 

} else { 

    //Exception 
} 

(응용 프로그램 컨텍스트는 'SRC/메인/자원'에 있습니다) ? 또는 스레드에 빈을 삽입 할 수 있습니까?

미리 감사드립니다.

+0

[가능한 복제본] (http://stackoverflow.com/a/1377740/248082). 이 대답을 바탕으로 커스텀 클래스는'Thread'를 확장하고 있습니다. – nobeh

답변

1

스레드를 관리하는 인프라 코드에서 비즈니스 논리 (서비스에 의존하는 코드)를 분리하는 것이 좋습니다.

예를 들어 비즈니스 로직에 대해 Runnable을 구현 한 bean을 선언 한 다음 Thread을 시작해야 할 때 사용할 수 있습니다.

그러나 수동으로 Thread을 시작하는 것은 좋은 습관이 아닙니다. 스레드 풀을 대신 사용하는 것이 좋습니다. 실제로 Spring은 스레드 풀과 비동기 실행에 대한 지원을 제공하므로 활용할 수 있습니다 (25. Task Execution and Scheduling 참조).

관련 문제