我对Spring的各个领域有清楚的理解。但是,我正在寻找企业级项目中bean的原型范围的一些用例。如果您能够共享一些原型作用域(而不是请求作用域)的真实生活用例,那就太好了。
发布于 2016-04-20 17:49:41
作为曾经在SpringSource工作过并曾与开发人员讨论过这个主题的人。这是我的想法。Prototype非常适合测试,因此名为prototype,而不是在每次从Spring容器请求bean的新实例时创建新的或更多的描述。
我也发现在我的使用多年来,我想不出任何其他地方的原型是合理的,在任何现实世界的生产应用。如果对象持有状态,那么它通常不应该是Spring。在我开发的所有应用程序中,我发现所有bean都是服务、存储库和Singleton非状态保存对象,在这些对象中,我需要添加诸如Transactionality、JPA、JMS等特性,这些特性为我们提供了POJO所没有的企业特性。
我的系统中持有状态的对象可能是my实体和View,或者是其他没有意义的Spring对象。因此,在我的生产应用程序中,还没有一个“原型”bean。
发布于 2012-03-12 12:46:47
我使用原型bean声明已配置的表单元素(例如,用于验证名称、电子邮件地址的textbox ),并为在我的webapp中创建的每个表单获取它们的“活动”实例。这些细节并不重要,只是我要这样概括的原则:
applicationContext.getBean("myBeanConfiguredFancy1")看作是一种类型的工厂方法,它创建在xml中预先配置的实例。发布于 2012-03-12 10:40:08
我使用的原型大多是与spring lookup-method一起使用的。我的应用程序是一个需要在tcp端口解码传入字节的游戏服务器。考虑以下bean定义
<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"返回的bean需要范围为prototype,因为它在我的应用程序中是一个有状态的bean。
注释:协议只不过是一组特定的解码器和编码器链接在一起。“责任链”设计模式。
https://stackoverflow.com/questions/9664810
复制相似问题