SPRING中属性SCOPE的prototype是什么意思

本文深入解析Spring框架中属性scope的prototype概念,包括其与singleton的区别、性能考量、以及在SSH2项目中如何正确配置Struts2 action的scope属性,特别强调了在不同场景下选择prototype模式的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字: spring中属性scope的prototype是什么意思

默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,

默认的配置。 Prototype: 每次对bean的请求都会创建一个新的bean实例。二者选择的原则:有状态的bean都使用Prototype作用域

,而对无状态的bean则应该使用singleton作用域。

在 Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和 global session。如

果你希望容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始

化配置。即在web应用的web.xml中增加这么一个ContextListener:

org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4以后的版本。比如Request作用域!

 

引用:http://wdlisoft.javaeye.com/blog/479049

 

singleton是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的 

如果你的类是没有状态的, 那用singleton 的性能要高一些 ,因为只有一个实例 。 
如果你的类是有状态的 ,那就必须显示的设置为prototype了 

在ssh2 项目中 , struts2的action交由spring管理的时候 ,spring默认是singleton的 ,而struts2的action显然是有状态的 ,所以必须显示设置为 
scope=“prototype” 

prototype为原型模式 , 每次action请求过来都会创建一个action 

但是对那些Dao的实现类推介scope=“singleton” ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些

来源:http://blog.youkuaiyun.com/liuc0317/article/details/5821778



### Java Spring 框架中坐标的含义及用途 #### ### 1. 坐标的概念在 Spring 中的意义 尽管“坐标”这一术语更常用于图形学或几何领域,但在 Java 的 Spring 框架语境下,“坐标”的概念并不直接存在。不过,如果从隐喻角度理解,可以将其类比为 **定位某个对象、资源或服务的唯一标识符**。这种抽象意义上的“坐标”,实际上可以通过 Spring 容器中的 Bean 名称、作用域(Scope)、以及依赖关系来体现[^2]。 例如,在 Spring 配置文件或注解中定义的一个 Bean 可以看作是在容器内的一个特定位置。这个位置通过唯一的 ID 或名称加以区分,并且它的生命周期和服务范围由 Scope 属性决定(如 Singleton 或 Prototype)。因此可以说,Bean 的定义类似于给定了一组“坐标”,从而让其他组件能够找到并使用该 Bean 实例。 ```xml <bean id="exampleService" class="com.example.ExampleServiceImpl" scope="singleton"/> ``` 在此 XML 片段中,`id="exampleService"` 就像是一条 X 轴上的标记;而 `scope="singleton"` 则相当于 Y 轴的信息——两者共同构成了访问此 Service 所需的关键参数[^4]。 #### ### 2. Spring 上下文中关于资源配置的理解 进一步深入探讨的话,Spring Context 提供了加载外部配置的能力,这也可以视为一种广义上的“坐标系”。比如当我们引入 Property 文件或其他形式的数据源时,实际上是建立了通往这些资源的一系列路径指示: ```properties app.datasource.url=jdbc:mysql://localhost:3306/testdb app.datasource.username=root app.datasource.password=secret ``` 上述属性映射到内存之后便成为应用程序运行期间可查询的知识点集合体。每当需要获取数据库连接字符串或者其他环境变量的时候,就等于沿着预设好的轨迹去检索相应的值[^1]。 另外值得注意的是,随着微服务体系架构的发展趋势日益明显,分布式追踪工具也开始流行起来。它们利用 TraceId 和 SpanId 这样的全局唯一编号作为跨进程调用链路分析的基础依据,这也是一种高级别的“坐标体系”。 #### ### 3. 结合实际场景说明其价值所在 最后来看几个具体的案例展示如何运用类似的思路解决问题: - 在 Web 应用开发过程中,RESTful API 请求往往附带 URL 参数或者 Header 字段,这些都是为了精确定位目标资源所设计的标准组成部分; - 当实现缓存策略时,Key 的选取原则本质上也是寻找最佳匹配模式的过程,即建立键值对之间的关联性以便高效存储与提取数据项; 综上所述,虽然严格意义上讲 Spring 自身并未明确提出过所谓“坐标”的明确定义,但从功能实现角度来看却处处蕴含着这样的设计理念[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值