在最早的struts2的框架中,由于当时Spring还没有引入,项目被加载到tomcat里,这时候前台有1000个请求,tomcat就会给它1000个线程,由于struts2是多例的,当时后台接值是装载在变量里的,这个时候由于属性只有一份,容易造成覆盖。并且由于struts2是多例,所以他在每一次都要1000个对象来处理访问请求,所以,这前后要创建3000个对象。对于资源也是极大的损耗。
后来是Struts2+Spring+hibernate的SSH框架中,由于spring是单例的,并且通过在方法参数中声明对象来接收值,所以Action只要一个对象,但是service和dao层依旧是1个对象,所以总共是1002个对象。
在springMVC+spring+mybatis的SSM中。只需要创建3个对象。因为SpringMVC,spring都是单例的,并且每一层都是通过对象注入实现。
SpringMVC默认是单例的,所以理论上是线程不安全,他是如何解决线程安全问题的。
如图所示。在堆内存中的方法有m1,m2,m3。当前台的访问的到来的时候,他会把这个方法拎出来执行,访问一次,就拎出来的一次,这样每一个m1()方法都没有被重复使用。
并且在SSM框架中,对象直接在方法里的参数中声明出来的,需要就声明一个,第一:前后台传值非常方便,第二:非常资源,第三:也避免了线程不安全的因素。
也是Spring的一种重要优势和特点。
版权声明:本文为qq_38495084原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。