单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
- Runtime类
Runtime是个单例类,表示当前JVM的运行环境。
可以看如下测试代码
Runtime runtime1 = Runtime.getRuntime(); Runtime runtime2 = Runtime.getRuntime(); System.out.println(runtime1.equals(runtime2));
返回true,两个Runtime的实例是一个对象。所以要用Runtime的对象时,不用像上面代码定义一个Runtime runtime1对象,而是直接Runtime.getRuntime()拿来用。不管调用几次都是返回同一个实例。
- Spring中的单例
如果在JVM中定义的单例类,可能由于长时间不用而被JVM自动回收。Spring的IOC容器里面定义的bean默认是单例,并且整个生命周期是Spring在管理,不会被JVM自动回收。
例如如下定义的service类
<bean id="helloWorldService" class="com.spring.HelloWorldService"/>
在J2EE工程里面,service和dao层都交给Spring管理,并且都是单例实现,每次拿到的service和到对象都是同一个对象。
- 不适合使用单例的场景
前面说到service和dao层都是单例的,可是action呢。strusts2的action里面有成员变量,对应form表单提交的数据,所以struts2的action一定不能是单例,每次请求进的action都是不同的实例,否则在高并发下成员变量的值就会混乱。
假如将struts2的action交给spring管理,一定要加上@Scope("prototype")注释,该action不是一个单例。
@Controller @Scope("prototype") public class LoginAction extends BaseAction { @Resource private ILoginService loginService; private String userName; private String passWord; }
同样的道理,Servlet在web容器中只被初始化一次,是个单例类,也就是所说的线程不安全。所以Servlet里面是没有成员变量的。
相关推荐
设计模式——单例模式源码,设计模式——单例模式源码
设计模式——单例 例子和一些ppt 看下没错的
1)程序功能:单例模式设计Memcache和Redis操作类,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/46410055。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目...
IOS应用源码——单例模式.zip
单例模式设计。
单例的5中实现及反射和反序列化破解单例。
对应博客讲解:http://blog.csdn.net/t1234xy4/article/details/52419546
NULL 博文链接:https://794950040.iteye.com/blog/2208104
单例模式源代码 博文链接:https://yangguangfu.iteye.com/blog/815944
单例模式一般在什么场合使用? 是关于单例模式的一个网页
今天给大家带来的是23种设计模式的第一种——单例模式。前天写的第一篇文章设计模式的七大原则,是我第一次写文章,目前看了浏览量,让我信心大增。文章有什么讲述方式不对的欢迎大家随时给我私信。24小时恭候!!...
单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在Android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenHelper)等都会用到单例...
C++设计模式——单例模式-附件资源
我们经常遇到这样的场景,线程A和线程B对同一个对象执行操作,但是在A里面new了后,B里面不便取,使的A,B对象是同一个对象,我们就会使用单例模式了。在Android中我们常用于数据库操作,蓝牙命令控制,以及一些工具...
ppt全新讲解设计模式 设计模式——23种设计模式
NULL 博文链接:https://maidoudao.iteye.com/blog/1329564