java单例的生命周期_Spring Bean生命周期详解
1.spring Bean生命周期
Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括:
默认情况下scope="singleton",那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;
scope="prototype",任何一个实例都是新的实例;
scope="request",在WEB应用程序中,每一个实例的作用域都为request范围;
scope="session",在WEB应用程序中,每一个实例的作用域都为session范围;
一个典型的Bean配置是这样的:,其中的scope表明这个bean是不是单例,默认为单例。
2.Bean可以通过指定属性init-method指定初始化后执行的方法,以及通过指定属性destroy-method销毁时执行的方法。
语法:
3.恶汉模式和懒汉模式
同jvm的单例模式一样,spring容器的单例模式同样分为这两种。默认情况下spring singleton为恶汉模式。
恶汉模式:启动Spring容器时(即实例化容器时),为所有的Spring配置文件中定义的bean都生成一个实例;
懒汉模式:在第一个请求是才生成一个实例,以后的请求都是调用这个实例,可以通过显示的声明将其设置为懒汉模式,如下:
4.Spring单例Bean和单例模式的区别
Spring单例Bean和单例模式的最大区别在于他们关联的环境不同,单例模式是指在一个JVM进程中仅有一个实例,二Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例。
首先看单例模式,在一个JVM进程中(理论上,一个运行的JAVA程序就必定有自己一个独立的JVM)仅有一个实例,所以无论在程序中何处获取单例模式的实例对象,始终都会返回同一个对象,以Java内置的Runtime为例(现在枚举是到单例模式的最佳实现),无论何时何地获取,西面的判断始终为真:
// 基于懒汉模式实现
// 在一个JVM实例中始终只有一个实例
Runtime.getRuntime() == Runtime.getRuntime()
与此相比,Spring的单例Bean是预期容器(ApplicationContext)模切相关的,所以在一个JVM进程中,所以在一个JVM进程中,如果有多个Spring容器,及时是到哪里bean,一定会创建多个实例,代码示例如下:
// 第一个Spring Bean容器
ApplicationContext context_1 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
Person yiifaa_1 = context_1.getBean("yiifaa", Person.class);
// 第二个Spring Bean容器
ApplicationContext context_2 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
Person yiifaa_2 = context_2.getBean("yiifaa", Person.class);
// 这里绝对不会相等,因为创建了多个实例
System.out.println(yiifaa_1 == yiifaa_2);
下面使其对应的配置文件:
yiifaa
所以,总而言之,Spring的单例bean和Spring bean管理容器密切相关,每一个容器都会创建自己独有的实例,所以GOF设计模式中的单例模式相差极大,但是在实际应用中,如果将对象的生命周期完全交给Spring管理(不在其他地方通过new或者反射等方式创建),其实也能打包单例模式的效果。
java单例的生命周期_Spring Bean生命周期详解相关推荐
- springbean的生命周期_spring bean生命周期(涵盖spring常用接口的载入)
spring bean生命周期流程图: 其中包含了很多常用的接口,可以参考spring 常用接口: 下面写个例子证明下: 1.实现InitializingBean以及各个Aware接口 p ...
- Spring生命周期Bean初始化过程详解
Spring生命周期Bean初始化过程详解 Spring 容器初始化 Spring Bean初始化 BeanFactory和FactoryBean 源码分析 Bean的实例化 preInstantia ...
- java 单例设计模式 [
为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...
- Java单例的常见形式
2019独角兽企业重金招聘Python工程师标准>>> Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾.也希望能给学 ...
- java单例枚举_Java增强枚举的用例
java单例枚举 Brian Goetz在消息" 增强枚举-用例 "中写道:"我们希望就现在实现的功能[ 增强枚举 ]获得用户反馈." 他陈述了他的消息的第一个 ...
- 最简单的java单例
最简单的java单例源代码: class Singleton { private Singleton() { } public static Singleton instance = null; ...
- java单例设计模式_Java设计模式之单例模式详解
在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...
- java 单例加锁方法的讨论
//2014.8.26 review 一个经典 DCL 问题 public class Singleton { private static Singleton instance=null; pub ...
- mongodb java 单例_JAVA单例MongoDB工具类详解
shasha 2018年09月07日 681 0 JAVA单例MongoDB工具类 JAVA驱动版本: org.mongodb mongo-java-driver 3.0.2 工具类代码如下: pac ...
- java单例的几种实现方法
java单例的几种实现方法: 方式1: public class Something { private Something() {}private static class LazyHolder { ...
最新文章
- spark编程基础--2.4函数式编程基础
- 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题
- guava-cache设计与实现
- sumif三个条件怎么填_函数SUMIF和SUMIFS
- 【一步到胃解决】Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are already
- html实现平面地图效果,HTML5 光点组成的平面和立体世界地图
- php数组的用法,PHP array_udiff_uassoc() 函数
- Educoder jQuery 入门
- Windows二进制文件合并工具
- 规划计算机网络的成本估算,传统的项目管理软件包括进度计划、成本控制、资源调度和( )等功能模块。...
- 利用小程序快速生成App,只需七步
- ant design vue 描述列表Descriptions数据绑定
- 20P42 500个LUTs创意旅行VLOG时尚婚礼人物环境复古特殊INS电影调色预设+25个复古老电影VHS特效
- 有哪些你一打开,就令你惊讶的网站?
- android EditText 属性介绍
- 方法的重写和重载,接口和抽象类区别
- 形容长得丑的30句经典句子
- Go-Micro微服务框架使用
- 医院his系统更换替换服务器,更换HIS时的数据迁移注意事项
- VS提示:已引发异常