it-source

스프링 프로토타입 범위 - 사용 사례?

criticalcode 2023. 11. 2. 21:50
반응형

스프링 프로토타입 범위 - 사용 사례?

나는 봄콩의 다양한 범위에 대해 잘 알고 있습니다.하지만 엔터프라이즈 티어 프로젝트에서 빈의 프로토타입 범위에 대한 몇 가지 활용 사례를 찾고 있습니다.요청 범위가 아닌 프로토타입 범위의 실제 사용 사례를 공유해 주시면 좋겠습니다.

이전에 SpringSource에서 일했던 사람으로서 이 주제에 대해 개발자들과 이야기를 나눈 적이 있습니다.제 의견은 이렇습니다.프로토타입은 제품을 테스트하는 데 유용하므로 프로토타입이라는 이름을 사용할 수 있으며, Spring 컨테이너에서 매번 요청할 때마다 새로운 콩 인스턴스를 생성하는 새로운 또는 더 많은 설명을 생성할 수 없습니다.

또한 수년간 사용해 온 결과, 실제 프로덕션 애플리케이션에서 프로토타입을 사용할 수 있는 다른 장소는 전혀 생각할 수 없었습니다.개체가 상태를 유지하는 경우 일반적으로 스프링 빈이 아니어야 합니다.지금까지 작업한 모든 응용 프로그램에서 모든 빈은 서비스, 저장소 및 Singleton non state holding 개체로 POJO에는 없는 엔터프라이즈 기능을 제공하는 Transactionality, JPA, JMS 등의 기능을 추가해야 합니다.

시스템에서 상태를 유지하는 개체는 개체 및 보기 DTO일 수도 있습니다. 또는 Spring Bean이 되기에는 전혀 의미가 없는 다른 개체일 수도 있습니다.따라서 생산 중인 제 애플리케이션에는 "원형" 콩이 단 한 개도 없었습니다.

프로토타입 원두를 사용하여 구성된 폼 요소(예를 들어 이름, 이메일 주소를 확인하도록 구성된 텍스트 상자)를 선언하고 웹 앱에서 생성되는 모든 폼에 대해 해당 요소의 "살아있는" 인스턴스를 얻었습니다.세부사항은 중요한 것이 아니라 원칙적인 것일 뿐입니다. 이렇게 요약하면 다음과 같습니다.

  • 구성 매개 변수가 많은 클래스가 있습니다.
  • 미리 정의된 구성 집합(fancy1, fancy2, stc)을 사용하여 인스턴스를 생성해야 합니다.
  • 생각해보세요.applicationContext.getBean("myBeanConfiguredFancy1")xml에서 미리 설정된 대로 인스턴스를 생성하는 일종의 공장 방식으로

시제품은 주로 스프링과 함께 사용해왔습니다.lookup-method. 저의 어플리케이션은 tcp 포트에서 들어오는 바이트를 해독해야 하는 게임 서버입니다.다음과 같은 콩 정의를 고려합니다.

<bean id="channelBufferProtocol" class="org.menacheri.protocols.impl.ChannelBufferProtocol">
    <lookup-method name="createLengthBasedFrameDecoder" bean="lengthFieldBasedFrameDecoder"/>
    <property name="eventDecoder" ref="eventDecoder"></property>
    <property name="lengthFieldPrepender" ref="lengthFieldPrepender"></property>
    <property name="eventEncoder" ref="eventEncoder"></property>
</bean>

프로토콜 구현 클래스 안에서 프레임 디코더를 만드는 다음 코드를 가지고 있습니다.pipeline.addLast("lengthDecoder", createLengthBasedFrameDecoder());이 메서드가 호출되면 spring이 새 프레임 디코더 인스턴스를 만들고 이를 반환합니다.

콩이 돌아 왔습니다.bean="lengthFieldBasedFrameDecoder"범위가 되어야 함prototype, 제 앱에서 상태 좋은 콩이기 때문에.

참고: 프로토콜은 서로 연결된 디코더와 인코더의 특정 집합에 불과합니다."책임의 사슬" 디자인 패턴.

응용 프로그램에서 각 스레드/요청에 대해 서로 다른 모델 클래스 인스턴스를 필요로 하기 때문에 모델 클래스의 경우(동면 상태의 엔티티라고도 함) 프로토타입 스코프를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/9664810/spring-prototype-scope-use-cases

반응형