论坛首页 Java企业应用论坛

spring中的Singleton与静态类的区别

浏览 20647 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-23  
giginet 写道
抛出异常的爱 写道
容器中的单例
jvm中的单例

域不同.

精辟,一针见血。
了解一下java关于堆和栈,你就清楚了。


说的很清楚了。。! 是要好好学习一下。。
0 请登录后投票
   发表时间:2010-07-23  
yangfuchao418 写道
呵呵 ,首先spring中的singleton和23中设计模式中的singletong是不同的。确切的说spring中的应该叫单对象。不是严格意义上的单例模式。

单对象我还是第一次听说过,能解释下单对象是什么意思吗?和单例有什么区别?
0 请登录后投票
   发表时间:2010-07-23  
xhdwell 写道
yangfuchao418 写道
呵呵 ,首先spring中的singleton和23中设计模式中的singletong是不同的。确切的说spring中的应该叫单对象。不是严格意义上的单例模式。

单对象我还是第一次听说过,能解释下单对象是什么意思吗?和单例有什么区别?

他说的单对象就是指的单例,
单例和单例模式不是一样的,单例模式的标准你可以百度百科一下哈:全局提供的,自己生成,只有一个这些标准才是单例模式
0 请登录后投票
   发表时间:2010-07-23  
笑我痴狂 写道
singleton是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的

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

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

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

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


线程安全和单例有什么关系?
0 请登录后投票
   发表时间:2010-07-23  
djandg 写道
抛出异常的爱 写道
容器中的单例
jvm中的单例

域不同.


谢谢您的回复,如果方便,能请您再讲得详细一点吗?谢谢



静态变量,在Java中,相当于有命名空间的全局变量。这个全局(整个JVM就一个上下文)在JVM。同理,Spring作为一个容器(或者称上下文),其中的单态Bean仅在Spring容器中。
0 请登录后投票
   发表时间:2010-07-23  
笑死我了。你们算是学到家了,还来个单对象跟单例不是一样的,哈哈哈!
0 请登录后投票
   发表时间:2010-07-24  
yangguo 写道
这个跟spring有个屁关系。要问就问单例模式与静态类的区别。
现在的人真是受框架所累,java都没搞懂,就整天ssh.


这个要顶,我也有想骂娘的冲动啊,框架害人啊!!

楼主问的问题充分说明的现在开发人员的基础素质啊。
0 请登录后投票
   发表时间:2010-07-24  
看玩此贴,朕心甚慰,哈哈哈哈~~~~飘过
0 请登录后投票
   发表时间:2010-07-25  
yangguo 写道
这个跟spring有个屁关系。要问就问单例模式与静态类的区别。
现在的人真是受框架所累,java都没搞懂,就整天ssh.


这个回答才是亮点,现在一帮SB程序员.
0 请登录后投票
   发表时间:2010-07-30  

哎,别人真心求教,用的着这么说吗,现在je上面的人啊。。。。
楼主,我给你发个列子,你一看就明白了。

	@Autowired
	private DataExportService dataExportService;
	@Autowired
	private DataExportService dataExportService1;	
	@Test
	public void test() throws Exception {
		DataExportService dataExportService3 = new DataExportService();
		DataExportService dataExportService4 = new DataExportService();
		System.out.println(dataExportService==dataExportService1); //返回 true(spring)
		System.out.println(dataExportService3==dataExportService4); //返回 false(单例模式)
	}

 具体就是域不一样。

1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics