模板之家 Spring为啥默认把bean设计成单例的?
Spring为啥默认把bean设计成单例的?
Spring作为当下主流的Java框架,它涉及了很多设计模式,如:单例模式、工厂模式、原型模式、模板模式、外观模式等等,而Spring Bean默认是被设计成单例模式的,为什么呢?
什么是单例Bean ?
要想弄清楚Spring Bean为什么默认被设计成单例的,就需要先了解一下什么是单例模式。单例模式是最为常用的软件设计模式,通过单例模式能保证一个类只有一个对象实例。
单例Bean只有在第一次创建Bean时创建,以后此Bean都是复用的,不会频繁的创建对象了。
单例Bean的优点
Spring之所以把Bean默认设计为单例的主要考虑还是性能!单例Bean优点很多,比如说:
1、复用Bean之后减少了新生实例的性能消耗;
2、减少了JVM垃圾回收,因为Bean少了,所以回收的对象也就少了;
3、可以更快的获取到Bean,因为单例对象生成后Spring就把它存入缓存了。
单例Bean的缺点
Bean默认被设计为单例的,其实也是有缺点的,最大的缺点就是无法保证线程安全!若多个请求依懒同一个Bean实例,假设此Bean是有状态的,那就会变得混乱,所以这块要考虑好。
综上,对于一般项目而言,单例Bean是最优的选择,不过在使用单例Bean时不要把Bean设计成有状态的。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
什么是单例模式,最好写一个简单的单例模式的实现,谢谢?
单例模式,就是一个类只能有一个实例。无论什么时候来请求,谁来请求,都是同一个实例。
单例模式,每种变成语言都是自己的实现方式,这里我以Java为例。单例有很多种实现方式,如果要一个最简单最完美的实现,那就请看以下代码,这是我前几天刚刚给一个朋友讲解单例时写的。
这种书写方式是Java集合框架的作者Joshua Bloch,在《effective java》中推荐的写法,“单元素的枚举类型已经成为实现Singleton的最佳方法”。
看起来是不是很简单?枚举单例就是这么简单,可以保证多线程并发访问的安全性,还可以防止序列化和反射。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。