복붙노트

[SPRING] Jersey 2 + Spring : @Autowired는 null입니다.

SPRING

Jersey 2 + Spring : @Autowired는 null입니다.

이 기사의 도움으로 Spring과 Jersey 2를 사용하려고합니다. Jersey 2를 Spring IoC 컨테이너와 함께 사용하는 방법

그러나 autowired 빈은 애플리케이션이 클라이언트 요청 후에 그것을 호출하려고 할 때 null이다. applicationContext.xml에는 구성 요소 스캔 설정 만 있습니다.

In pom.xml: 
<spring.version>4.1.0.RELEASE</spring.version>
<jersey.version>2.12</jersey.version>

@Component
@RequestScoped
@Path("/user")
public class UserREST {
    @Autowired
    private UserFacade userFacade;

    @POST
    @Path("/auth")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({MediaType.APPLICATION_JSON})
    public AuthResponse authorize(User user){
        return userFacade.authorize(user);  // Null is caught here
    }
}

-

@Component
public class UserFacade {

    public AuthResponse authorize(com.pushock.model.User user){
        AuthResponse response = new AuthResponse();
        response.setAuthorized(true);
        return response;
    }
}

내가 뭘 잘못하고 있죠?

UPD : 여기 내 pom.xml https://bitbucket.org/spukhov/memo-ws/src/00724e00e3aa786f62fd0e43fe0606de6ae569df/pom.xml?at=master입니다.

해결법

  1. ==============================

    1.스프링 관리 빈은 JAX-RS 클래스에 직접 삽입 할 수 없으므로 Spring과 통합하기 위해 Jersey 확장을 사용해야한다.

    스프링 관리 빈은 JAX-RS 클래스에 직접 삽입 할 수 없으므로 Spring과 통합하기 위해 Jersey 확장을 사용해야한다.

    pom.xml에없는 maven 종속성이 있습니다.

    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>2.12</version>
    </dependency>
    

    Jersey Documentation : Chapter 22를 참조하십시오. Spring DI와 페이지 하단에는 Spring 통합 샘플 Github 프로젝트에 대한 링크가 있습니다.

    프로젝트에서 보았던 또 다른 문제점은 스프링 컨텍스트를로드하고 구성하는 방법을 보여주지 않았다는 것입니다. web.xml에 구성해야합니다.

       <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    
  2. ==============================

    2.Spring 환경 설정을 위해 Java 기반 접근법을 사용하는 경우 다음 작업도 수행해야합니다.

    Spring 환경 설정을 위해 Java 기반 접근법을 사용하는 경우 다음 작업도 수행해야합니다.

    servletContext.setInitParameter("contextConfigLocation", "<NONE>");
    

    WebApplicationInitializer 구현에서

  3. from https://stackoverflow.com/questions/25899226/jersey-2-spring-autowired-is-null by cc-by-sa and MIT license