美文网首页我爱编程
SpringMVC为何设计成单例模式?

SpringMVC为何设计成单例模式?

作者: 凌晨的咸鱼 | 来源:发表于2018-06-11 12:46 被阅读0次

    何为单例、多例?

    单例模式即整个程序中只有一个对象,所有用户共用一个对象(scope="singleton"),在java中SpringMVC默认为单例。

    多例模式即每次访问都会创建一个新的对象(scope="prototype"),在java中struts2默认为多例。

    为何struts2默认为多例?

    struts2是基于类的属性开发的,类的属性作用于整个类,基于struts2开发时,每次请求都会产生一个Action对象(多例),而这个Action对象中的属性会绑定前端传过来的值,例如绑定form表单中提交的数据,所以,如果Action是单例的话,在多线程的情况下,多个用户上传的数据如何使用这一个Action对象去接收?如果是单例,每个用户是不是又能看到其他用户的信息?显然,不能用单例。

    为何SpringMVC可以为单例?

    SpringMVC是基于方法开发的,所以,你在Spring中几乎没见过在类里面定义了新的属性(涉及到spring多线程并发问题,没了解过并且有兴趣的小伙伴可以去百度下),那么前端传过来的值如何接收呢?答案是在方法里面的形参进行接收(接收方式有通过字符串接收,有通过对象接收等,这里不做细讲),一个方法结束形参就销毁了,多线程访问每次都会有一块新的内存空间产生,所以里面的参数是不会共用的。所以,如果你在Contorller里面不定义全局属性,那么单例完全是安全的。

    总结来说就是,你在SpringMVC中不定义全局属性,那么他使用单例就是线程安全的。

    为何SpringMVC设计成单例?

    因为单例模式可以提高程序运行效率,提高性能,不需要每次访问都创建新的对象,所以,不需要花费额外的性能去创建对象,销毁对象,管理对象等等........

    所以,我可以设计成单例以提高性能和运行效率,我为何不这么做呢?显然,SpringMVC的设计者当初就是这么想的。

    注: Spring默认为单例,但是也可以改为多例。通过注解@Scope(value="prototype")

    希望以简短的语言,让我们通俗的理解。

                                                                                                       —千里之行,始于足下

    相关文章

      网友评论

        本文标题:SpringMVC为何设计成单例模式?

        本文链接:https://www.haomeiwen.com/subject/vpzceftx.html