2017-02-04 4 views
0

스프링 소스를 저지 리소스에 자동으로 어떻게 집어 넣을 수 있습니까?스프링 4와 저지의 프로그램 적 통합

jax-rs 리소스의 필드를 초기화하는 스프링을 사용하는 저지 앱을 함께 자갈하려고합니다. 인터넷 검색에서 가능한 것 같지만 항상 null입니다. 제 콩은 만들어 지지만 주사는 안됩니다.

내 REST 자원

@Path ("/clips") 
@Component 
public class ClipStreamService { 

    @Autowired 
    private ClipHandler clipHandler; 

    @GET 
    public Response defaultGet() { 
    Clip clip = clipHandler.getDefault(); <-- ***** throws an NPE ***** 

스프링 WebInitilizer

public class SpringWebInitialiser implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext container) { 

    // Create the 'root' Spring application context 
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
    rootContext.register(RootConfig.class); 
    rootContext.setServletContext(container); 
    container.addListener(new ContextLoaderListener(rootContext)); 

    // Create the dispatcher servlet's Spring application context 
    AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); 
    dispatcherContext.register(WebConfig.class); 

    // Register and map the dispatcher servlet 
    ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/"); 
    } 
} 

그리고 콩 구성 할 수

@Configuration 
@ComponentScan ({ ... }) 
public class WebConfig { 

    @Bean 
    public ClipHandler clipHandler() { 
    return new ClipHandler(); 
    } 
} 

답변

1

(나는 또한 RootConfig에 빈을 추가 해봤 주) 다음과 같이 저지 자원에서 수동으로 autowiring을 호출합니다 :

@Context 
private ServletContext servletContext; 

@PostConstruct 
public void init() { 
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, servletContext); 
} 
+0

'@ Component'를 제거하면 작동합니다. 나는 그것을 제거 할 필요가 없다고 여겨지는 예제를 보았습니다. 어떤 아이디어로 그렇게 할 수 있습니까? – TedTrippin

+0

대안은 사용자 jersey-spring3인데 순수한 관점에서 spring4 앱에 이상적은 아닙니다. – TedTrippin