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生命周期详解相关推荐

  1. springbean的生命周期_spring bean生命周期(涵盖spring常用接口的载入)

    spring bean生命周期流程图: ​ ​​​ 其中包含了很多常用的接口,可以参考spring 常用接口: 下面写个例子证明下: 1.实现InitializingBean以及各个Aware接口 p ...

  2. Spring生命周期Bean初始化过程详解

    Spring生命周期Bean初始化过程详解 Spring 容器初始化 Spring Bean初始化 BeanFactory和FactoryBean 源码分析 Bean的实例化 preInstantia ...

  3. java 单例设计模式 [

    为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...

  4. Java单例的常见形式

    2019独角兽企业重金招聘Python工程师标准>>> Java单例的常见形式 本文目的:总结Java中的单例模式 本文定位:学习笔记 学习过程记录,加深理解,便于回顾.也希望能给学 ...

  5. java单例枚举_Java增强枚举的用例

    java单例枚举 Brian Goetz在消息" 增强枚举-用例 "中写道:"我们希望就现在实现的功能[ 增强枚举 ]获得用户反馈." 他陈述了他的消息的第一个 ...

  6. 最简单的java单例

    最简单的java单例源代码: class Singleton {  private Singleton()  { } public static Singleton instance = null; ...

  7. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  8. java 单例加锁方法的讨论

    //2014.8.26  review 一个经典 DCL 问题 public class Singleton { private static Singleton instance=null; pub ...

  9. mongodb java 单例_JAVA单例MongoDB工具类详解

    shasha 2018年09月07日 681 0 JAVA单例MongoDB工具类 JAVA驱动版本: org.mongodb mongo-java-driver 3.0.2 工具类代码如下: pac ...

  10. java单例的几种实现方法

    java单例的几种实现方法: 方式1: public class Something { private Something() {}private static class LazyHolder { ...

最新文章

  1. spark编程基础--2.4函数式编程基础
  2. 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题
  3. guava-cache设计与实现
  4. sumif三个条件怎么填_函数SUMIF和SUMIFS
  5. 【一步到胃解决】Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are already
  6. html实现平面地图效果,HTML5 光点组成的平面和立体世界地图
  7. php数组的用法,PHP array_udiff_uassoc() 函数
  8. Educoder jQuery 入门
  9. Windows二进制文件合并工具
  10. 规划计算机网络的成本估算,传统的项目管理软件包括进度计划、成本控制、资源调度和( )等功能模块。...
  11. 利用小程序快速生成App,只需七步
  12. ant design vue 描述列表Descriptions数据绑定
  13. 20P42 500个LUTs创意旅行VLOG时尚婚礼人物环境复古特殊INS电影调色预设+25个复古老电影VHS特效
  14. 有哪些你一打开,就令你惊讶的网站?
  15. android EditText 属性介绍
  16. 方法的重写和重载,接口和抽象类区别
  17. 形容长得丑的30句经典句子
  18. Go-Micro微服务框架使用
  19. 医院his系统更换替换服务器,更换HIS时的数据迁移注意事项
  20. VS提示:已引发异常

热门文章

  1. CCF CSP 201512-02 消除类游戏
  2. EditPlus中文版 安装教程
  3. Setup Factory 卸载 Invalid Start mode :archive filename
  4. 软件测试工程师企业级培训视频教程
  5. SQL查询语句的基本使用方法
  6. 高等数学——伽马函数
  7. 优雅降级实现IE8的transform平移属性
  8. 查看局域网内的所有IP地址
  9. Tomcat6 如何彻底卸载,才干净?
  10. i686和x86_64的区别