spring如何同时处理多条请求? 400 报错 小弟接触spring时间不长,之前从事C开发,对效率问题比较重视。
spring里面的bean管理是单例实现,在服务器同时接受多个请求是,是如何处理的?
如果多个请求中有相同的bean使用,这个看似与bean单例管理相矛盾,spring存在怎样的机制来处理这种情况的?
希望有人能解决这个疑惑,3Q!
不矛盾啊,既然是单列,每次访问都是不同的线程,只要注意线程安全问题就可以了啊。所以在你的bean里面不能有成员变量,这样就不会有并发问题啊。######回复 @HUncle : no 3k,我也是新手,自己的理解而已。######回复 @妹夫 : 对,单例特别方便,但是有隐患,3Q######回复 @妹夫 : 还有一个就是单例能在程序中随处获得实例,很方便。个人觉得。######回复 @HUncle : 既然用了spring,都知道spring有依赖注入这么个东西,我们可以把需要依赖的bean交给spring去管理。如果使用了成员变量,操作它的时候就必须保证同步,这就是我说为什么不能使用成员变量,至少我没见过别人系统里会使用spring然后用同步方法去操作内部依赖的bean的。######回复 @HUncle : 单例能保证程序中这个实例是唯一的,减少java的内存回收,所以性能高。我不知道别人在哪些方面用单例,但我在写GUI程序的时候单例用的多,因为GUI程序并发少。并不是说不能存在成员变量,如果存在成员变量的时候你去操作它的时候必须保证线程同步,java中用synchronized。大量使用synchronized会导致性能降低######搜索一下 Bean的作用域,会找到你要的答案。######我说的就是singletion 的情形,此情况下如何处理多请求?######单例多线程######不知道底层如何规避线程安全的######这有矛盾吗?你多个请求过来 不就是多个线程访问单例么?
学习Spring有段时间了,说说我的认识吧:并不是所有的bean都可以配置成单例的。对于Spring的系统,一般都分为Controller,Service,DAO;对于Service,一般会注入DAO,而DAO就回用到数据连接Connection,我们知道Connection是有状态的,在多线程环境下,肯定会遇到问题,Spring为我们考虑到了这种情况,对此做了特殊处理,只要使用Spring提供的线程绑定资源获取工具得到的Connection就是线程安全的,JDBC或iBatis对应DataSourceUtils,Hibernate对应SessionFactoryUtils,从相应的工具类中获取的Connection,通过了ThreadLocal处理,所以不会出现线程安全问题。另外Spring为我们做了更多事情,我们可以不必自己取获取Connection,Spring为我们提供了DAO模板类,JDBC对应JdbcTemplate,Hibernate对应HibernateTemplate,iBatis对应SqlMapClientTemplate,直接使用模板进行数据访问操作完全不用担心线程安全问题(其内部其实也是调用了相应的工具类)。所以我们的DAO完全可以成为singletion 对象。然后只要使用Spring提供的事务管理,我们的Service也同样可以成为singletion 对象。而我们的Controller,如果只注入了Service,而没有其他状态对象,同样可以成为singletion 对象。当然了,如果还包含其他有状态的成员属性,Spring也是无能为力的,这时候只能定义为request或者其他合适的对象了。
希望对你有所帮助。
######讲的挺好,其实我只是想知道单例的情况,不过还是感谢你,3Q######版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。