2016-11-25 6 views
1

일부 Java Jersey 관련 작업을하고 있으며 다음 작업을 수행하려고합니다.바인드 타임에 Java Jersey 생성 클래스

public class SerialSubject{ 
    private final SomeDatabase someDatabase; 

    @Inject 
    public SerialSubject(SomeDatabase someDatabase){ 
     this.someDatabase = someDatabase; 
     initializeSerial(); 
    } 

    InitializeSerial(){ 
     SerialConfig config = SomeDatabase.getConfig(); 
     //Open a Serial connection using this config 
    } 
} 

내가 AbstractBinder를 사용하여이 클래스를 바인딩 평소에 따라 내 ResourceConfig에 등록 해요 :

나는라는 클래스 SerialSubject 있어요.

bind(SerialSubject.class).to(SerialSubject.class).in(Singleton.class) 

자원에 의해 요청되고 직렬 연결이 열렸을 때 종속성이 해결되었습니다.

경고 : 시작시 직렬 연결을 열고 싶습니다. 클래스를 즉시 인스턴스화 할 수있는 방법이 있습니까? 수동으로 구성하는 것은 수행하지 않습니다. 데이터베이스 (ioc에 이미 바인드되어 있음)가 구성을 검색하는 데 필요하기 때문입니다.

답변

3

당신은 즉시이 인스턴스가 그들의 Descriptor의가 추가 대응 즉시 생성된다는 점을 제외하고 javax.inject.Singleton 범위처럼 작동 범위 인 Immediate 범위

를 사용할 수 있습니다. 해당하는 Descriptor이 로케이터에서 제거되면 Immediate 범위 서비스가 삭제됩니다. 특히 ImmediateServiceHandle.destroy() 메서드가 호출되면 범위 서비스가 삭제되지 않습니다. 그들은 또한 가상 즉시 서비스

또한 즉각적인 범위를 사용할 수 있도록 ServiceLocator을 구성해야합니다
bind(SerialSubject.class).to(SerialSubject.class).in(Immediate.class) 

해짐에 따라 보관, 즉시 서비스에 주입 된 서비스를주의해야한다.

public class JerseyApplication extends ResourceConfig { 

    @Inject 
    public JerseyApplication(ServiceLocator locator) { 
     ServiceLocatorUtilities.enableImmediateScope(locator); 
    } 
} 

은 참조 :