2016-08-02 3 views
1

이 모든 노력의 목표는 런타임에 변경할 수있는 리소스에 데이터 소스를 삽입하는 것입니다. 가능한 한 내 리소스 내 논리를 부 풀리지 않아야합니다.Jersey 1.19.1에 Spring DI를 추가하면 왜 내 리소스가 싱글 톤이됩니까?

입니다 봄 4.1.9.RELEASE (스프링 AOP, 스프링 콩, 스프링 컨텍스트, 봄 코어, 스프링 식, 스프링 웹)

를 사용하여 저지 1.19.1와 레거시 응용 프로그램

내가

...request... 
Constructor Hit 
...request... 
Constructor hit 

그래서, 자원이 생성되어 다음과 같은 출력을 얻을이 자원 충돌 실행하면

@Path("/test) 
public class TestResource { 
    public TestResource(){ 
    System.out.println("Constructor Hit"); 
    } 
} 

매번 요청이 큰 : 그래서 여기 내 예를 들어 자원입니다!

이제 스프링을 사용하여이 리소스에 빈을 주입하려고합니다. 따라서 다음 클래스를 얻습니다.

@Path("/test) 
@Component 
public class TestResource { 
    @Inject 
    public TestResource(MyBean test){ 
    System.out.println("Constructor Hit"); 
    } 
} 

는 지금은 자원 만 (나는 봄 응용 프로그램 작성시 같은데요)를 한 번 만들어

Constructor hit 
...request... 
...request... 

다음과 같은 출력을 얻을.

해결 방법이 있습니까? 나는 그것이 @Component와 함께 주석을 붙이기 때문에 그것이있다라고 생각한다. 그러나 나는 그것없이 주입 부품을 얻는 것처럼 보일 수 없다.

+0

왜 그런가요? 클래스가 상태를 유지하지 않는 한 완벽하게 단일성이 될 수 있습니다. –

+0

아이디어는 런타임에'MyBean' 인스턴스가 실제로 무엇인지를 전환하고 싶다는 것입니다. 예를 들어, 런타임에서 변경하려는 데이터 소스이며, 팩토리에서 추출하는 방법에 대한 리소스에 로직을 추가하는 대신 논리를보다 명확하게 유지하기 위해 리소스에 해당 인스턴스를 주입하려고합니다. –

+0

그런 다음 AOP를 사용하여 로직이 포함 된 MyBean을 래핑하십시오. 수동으로 수행하는 대신 어딘가에 로직을 구현해야하며 더 똑똑한 방법이 될 수있는 생성 오버 헤드가 필요합니다. –

답변

0

봄의 기본 범위는 싱글 톤입니다. 싱글 톤에서 프로토 타입 클래스를 호출하면 스프링 DI가 인스턴스화 시간에 프로토 타입 클래스를 한 번만 주입합니다. 싱글 톤 빈이 런타임시 프로토 타입 빈의 새 인스턴스를 가져 오려면이 값을 issue으로 읽으십시오.