2012-08-17 3 views
1

자바 휴식 API가 있습니다. 궁금한 점은 다음과 같습니다.자바 휴식 API의 리소스 인스턴스

특정 클라이언트 (예 : X라는 사람이 컴퓨터 Y를 사용 중임)가 동일한 URI를 3 번 ​​호출한다고 가정 해 보겠습니다. (예 : https://stackoverflow.com/firstname/kasav/lastname/bere). 또한 리소스에 비 정적 카운터가 있다고 가정합니다.

class ResourceA{ 
    int count = 0; 

    @Get 
    public Response service(){ 
     count++; 
     //return count below 
    } 
} 

지금 발신자는 세 가지 통화에 대해 동일한 응답받을 않습니다

1 

을 또는 호출자는 3 분 후, 두 번째 호출 후, 첫 번째 통화에 대한 321 나올까요 요구.

여러분 중 일부는 분명하지만 나에게는 그렇지 않을 수 있습니다. 도와 줘서 고맙다.

답변

1

JAX-RS 스펙을 올바르게 따르는 것으로 가정합니다.

3.1.1 라이프 사이클과 기본적으로 환경

새로운 자원 클래스의 인스턴스가 해당 자원에 대한 각 요청에 대해 생성됩니다. 먼저 생성자 (섹션 3.1.2 참조)를 호출 한 다음 요청 된 모든 종속성을 주입 한 다음 (3.2 절 참조) 적절한 메소드 (3.3 참조)를 호출하고 마지막으로 객체를 가비지 수집에 사용할 수 있도록합니다 ( ). . 구현은 다른 리소스 클래스주기를 제공 할 수도 있으며, 이들을 지정하는 메커니즘은 외부에있다. 예 : inversion-of-control 프레임 워크에 기반한 구현은 해당 프레임 워크에서 제공하는 모든 라이프 사이클 옵션을 지원할 수 있습니다.

이와 같은 질문에 대한 답변은 각 요청에 대해 클래스가 시작될 때 모든 발신자에게 1이 전송됩니다.

JAX-RS 사양은 JSR-311을 참조하십시오.

+0

나는 당신의 대답을 확인하려고 노력했는데 할 수 없었다. 기본적으로 각 호출에 대해 하나의 객체가 생성된다고 말합니다. 1 백만 명의 사용자가 있다면 어떻게됩니까? 그건 비효율적 인 것 같습니다. – kasavbere

+0

예제에서와 같이 리소스 클래스에 생성자가 없다면? 각 사용자가 여전히 '0'을 볼 수 있습니까? – kasavbere

+0

스펙과 만 이야기 할 수 있습니다. 당신은 당신이 달리고있는 컨테이너와 훨씬 더 많은 정보를 버렸습니다. – Krrose27

1

기본적으로 JAX RS 자원은 요청 범위이므로 각 요청에 대해 새 인스턴스를 생성합니다.

자원의 동일한 인스턴스로 여러 요청을 처리하려면 @Singleton 주석으로 자원 (이 경우 클래스 ResourceA)을 표시 할 수 있습니다. 싱글 톤으로 표시하면 첫 번째 요청의 경우 1, 두 번째 요청의 경우 2 등과 같이 ResourceA 클래스의 출력이됩니다.