2013-04-02 2 views
4

봄 신청의 DAO 및 서비스 클래스는 싱글 톤 범위 여야한다는 것을 여러 곳에서 봤습니다. 내가 어떤 범위를 정의하지 않았으므로 나는 서비스 클래스봄 mvc 응용 프로그램에서 콩 범위를 사용하는 모범 사례

@Service 
public class CustomerServiceImpl implements CustomerService { 

    @Autowired 
    private CustomerDAO customerDAO; 

    ....... 
    parameterised methods only.... 
} 

와 DAO 클래스 다음 한 내 응용 프로그램에서

@Repository 
public class CustomerDAOImpl implements CustomerDAO { 

@Autowired 
private SessionFactory sessionFactory; 

............... 
parameterised methods only.... 
} 

는 기본 범위는 모두 CustomerService를하고 CustomerDAO singleton.So입니다 또한 컨테이너 당 한 번만 인스턴스화됩니다. 또한 DAO 클래스는 시작시 한 번만 서비스 클래스에 자동으로 호출됩니다. 무거운 요청 웹 응용 프로그램이라는 의미이므로 또는입니까?) 수백 개의 스레드가 두 클래스의 동일한 인스턴스를 사용합니다.

그런데 스레드 안전성은이 경우 어떻게 보장됩니까?
xml에 정의 된 hibernate sessionfactory bean의 범위는 어떻습니까?

스프링 mvc 애플리케이션에서 빈 범위와 스레드 안전성에 대해 매우 혼란 스럽습니다. 스프링 소스 문서에서는 웹 애플리케이션에 대한 설명이 명확하지 않습니다.

혹시 무거운 요청 웹 응용 프로그램에 콩 범위 (DAO, 서비스, 컨트롤러 및 기타 콩)를 사용하는 모범 사례를 설명해 주시겠습니까?
이러한 링크를 설명하는 링크는 저에게 감사드립니다.

미리 제안 해 주셔서 감사합니다.

답변

2

서비스 및 DAO 단독 개체가 상태를 보유하지 않는 한 (메서드 내부에서 인스턴스 변수를 조작하지 않음) 스레드 안전성에는 문제가 없습니다.

세션 팩토리와 관련하여 스프링 web-app의 기본 최대 절전 모드 세션 범위는 "요청 당 최대 하나 이상의 세션"패턴을 기반으로합니다. 즉, 각 HTTP 요청 (스레드)마다 하나의 세션이 있으므로 걱정할 이유가 없습니다 동시성에 대해서도.

관련 문제