2011-10-29 3 views
0

봄 콩에는 두 가지 유형의 범위가 있습니다 (웹의 범위를 고려하지 않은 경우) : singleton이며 기본값은 prototype입니다. 대충 그들은 문맥 내에서 싱글 톤과 프로토 타입 디자인 패턴을 구현합니다.스프링의 상태 비 저장 및 상태있는 콩의 아날로그 코드

그래서 bean이 프로토 타입 범위를 가지고 있다면 EJB의 stateful bean과 같은 고유 한 상태를 유지할 수 있습니다. 빈의 범위가 싱글 톤 (singleton)이면 컨테이너는 하나의 인스턴스 만 생성합니다. 그래서 EJB 3.1의 싱글 톤 빈은 봄 싱글 톤 빈 (singleton beans)의 유사어라고 말할 수 있습니다.

하지만 스프링에서 상태 비 저장 빈의 기능을 얻을 수있는 방법은 무엇입니까? (EJB 컨테이너의 비 상태 빈 풀링에 대해 언급하고 있으며 각 스레드는 상태없는 빈의 고유 인스턴스를 가지고 있습니다.)

+0

스레드에 고유 한 인스턴스가 있다는 것은 사실이 아닙니다. 단일 스레드가 동일한 Bean에 대해 서로 다른 호출을 여러 번 수행하면 모든 호출이 다른 인스턴스에서 종료 될 수 있습니다. 오히려 그것은 다른 방향입니다. 무 상태 세션 빈에서 한 번에 하나의 스레드 만 활성 상태 일 수 있으며 프레임 워크는 서로 다른 요청을 다른 인스턴스로 자동 라우팅합니다. –

+0

고마워. 그냥 너에 대해서 말한거야. – maks

답변

2

빈을 스레드 세이프로 만들 수 있습니다. 싱글 톤 빈은 OK입니다 (대부분의 경우).

그렇지 않으면 프로토 타입을 사용해야합니다. Spring 프로토 타입 빈과 Stateless EJB 세션 빈 사이의 차이점은 상태없는 세션 빈이 풀링된다는 것입니다. 그러나 이러한 시대에 매번 새로운 인스턴스를 생성하거나 풀링하는 것은 별 차이가 없습니다. 매번 새 인스턴스를 만들면 GC에 도움이 될 수도 있습니다.

+2

풀은 풀을 적절한 크기로 설정하여 자동 리소스 조절을 도와줍니다. 게다가 bean 인스턴스는 값이 싸지 만 관련 리소스는 없을 수도 있습니다. 또한 프록시 + 풀 패턴을 사용하면 많은 '빈'을 주입하는 것이 매우 저렴 해지고 결국 사용되지 않아도 문제가되지 않습니다. 상태없는 빈의 경우 프록시는 풀을 가리키는 URL과 비슷하기 때문에 –

관련 문제