Tar*_*pra 28 java spring prototype-scope
我清楚地了解了Spring bean的各种范围.但我正在寻找企业级项目中bean的原型范围的一些用例.如果你可以分享原型范围的一些真实用例(而不是请求范围),那将是很棒的.
我使用原型bean来声明配置的表单元素(一个配置为验证名称,电子邮件地址的文本框),并为我在webapp中创建的每个表单获取它们的"活"实例.细节并不重要,只有原则,我会这样总结:
applicationContext.getBean("myBeanConfiguredFancy1")视为一种工厂方法,它可以在xml中预先配置实例作为以前在SpringSource工作过并与开发人员就此主题进行过交谈的人。这是我的看法。原型非常适合测试事物,因此,每次您从Spring容器中请求原型时,都应使用原型名称而不是createnew或更多有关创建bean的新实例的描述。
多年来,我还发现我无法在任何在现实世界中的生产应用程序中使原型有意义的任何其他地方。如果您的对象保持状态,则通常不应将其作为Spring bean。我在所有工作的应用程序中都发现,所有bean都是服务,存储库和Singleton非状态持有对象,我需要在其中添加诸如Transactionality,JPA,JMS之类的功能,这些功能为我们提供了POJO所没有的企业功能。没有。
我系统中保持状态的对象可能是我的实体和视图DTO,或者是其他没有意义的对象,例如Spring Bean。因此,在我的生产应用程序中,没有一个“原型” bean。
我主要将原型与 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>
Run Code Online (Sandbox Code Playgroud)
在协议实现类中,我有以下代码来创建帧解码器。pipeline.addLast("lengthDecoder", createLengthBasedFrameDecoder());当调用此方法时,spring 将创建一个新的帧解码器实例并返回它。
返回的 beanbean="lengthFieldBasedFrameDecoder"需要具有范围prototype,因为它是我的应用程序中的有状态 bean。
注意:协议不过是链接在一起的一组特定的解码器和编码器。“责任链”设计模式。
| 归档时间: |
|
| 查看次数: |
12579 次 |
| 最近记录: |