2015-02-07 5 views
0

저는 Spring을 처음 사용합니다.Stateful (?) @ Service에 @Scope를 선택해야합니까?

저는 spring-context에 의존하는 라이브러리 프로젝트를 진행하고 있습니다.

@Scope(value = "@@?") 
@Service 
public class MyService { 

    @PostConstruct private void constructed() { 
    } 

    @PreDestroying private void destroying() { 
     resource.clear(); 
    } 

    public void doSome() throws IOException { 
     // try{}finally{} is not the case 
     resource = getSome(); 
     doSome(resource); // may throw an IOException 
     resource.clear(); 
    } 

    private transient MyResource resource; 
} 

이 인스턴스가 삭제 될 때마다 resource을 무료로 보내고 싶습니다.

@Scope에 따르면 내가 선택할 수있는 네 가지 옵션이 있습니다.

  • WebApplicationContext.SCOPE_SESSION
  • ConfigurableBeanFactory.SCOPE_PROTOTYPE
  • WebApplicationContext.SCOPE_REQUESTConfigurableBeanFactory.SCOPE_SINGLETON

    나는 WebApplicationContext 내 종속성 트리에서 사용할 수없는 것으로 나타났다. (나는 spring-webmvc에 의존하지 않습니다.)

    나는 ConfigurableBeanFactory.SCOPE_PROTOTYPE을 선택할 계획입니다.

    내가 선택한 범위가 MyService를 안전하게 만드는 것은 사실입니까? 둘 이상의 클라이언트가 동일한 서비스 인스턴스를 주입 할 수 없다는 뜻입니까? 스프링 컨테이너가 처리할까요?

  • 답변

    1

    실제로는 Request, Session, Global-sessionApplication 범위는 웹 인식 응용 프로그램 컨텍스트에서만 사용할 수 있습니다.

    Singleton (봄 컨테이너 당 단일 인스턴스 가), 그래서 프로토 타입의 범위를 사용하여 새로운 인스턴스를 생성하고 클라이언트에 반환됩니다 보장합니다 봄에 의해 사용되는 기본 범위, 그래서 예 Prototype 당신이이 경우에 필요하다 .

    관련 문제