面试官:spring单例模式,多例模式,懒汉模式,饿汉模式(一)?

简介: 面试官:spring单例模式,多例模式,懒汉模式,饿汉模式(一)?

spring有单例模式和多例模式,首先单例模式是什么呢?


单例模式:不管获取对象几次,每次getBean都是同一个实例。


单例模式又分为懒汉模式和饿汉模式。


饿汉模式:在加载对象时候,对象就会创建实例,为所有spring配置文件中定义的bean都是生成的一个实例,天生线程安全的,多线程的情况下也不会出现问题。


懒汉模式:在获取对象第一次请求的时候,才会创建实例。本身是线程不安全的,但有几种实现线程安全的写法。


这篇文章主要介绍spring单例模式和多例模式实例,话不多说,直接上代码:


1、 spring单例模式



public static void main(String[] args) {
        log.info("加载xml  START.....");
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
        log.info("加载xml  END.....");
        HelloWord helloWord1 = (HelloWord)applicationContext.getBean("helloWord");
        HelloWord helloWord2 = (HelloWord)applicationContext.getBean("helloWord");
        log.info("两次取的对象是否一致:{}",helloWord1 == helloWord2);
    }

application.xml文件如下,重点,default-lazy-init="true"参数有的时候,代表是懒汉模式,吧此参数去掉,是spring饿汉模式 :


<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean class="com.first.bean.HelloWord" id="helloWord" scope="singleton" />
</beans


(1)饿汉模式控制台打印如下,可以看到,饿汉模式情况下,在加载bean的时候,就会create实例,并且是同一个实例,返回true。(xml文件加去掉参数default-lazy-init="true")

image.png

2)懒汉模式控制台打印如下,可以看到,懒汉模式情况下,是在获取对象的时候create实例。(xml文件加参数default-lazy-init="true")

image.png


2、spring多例模式


有单例模式就有多例,多例模式是什么呢?


多例模式:每次获取对象getBean都会创建一个新的实例,不会在容器初始化的时候创建,所以不会在加载bean的时候创建,所以多例模式只有懒汉模式,没有饿汉模式。多例模式配置文件改为scope=“prototype”


话不多说,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean class="com.first.bean.HelloWord" id="helloWord" scope="prototype" />
</beans


控制台打印如下,可以看到是false,所以每次getBean的对象都是新的对象,还可以看到,并没有创建bean容器,因为多例的模式下,bean对象不归IOC容器管理。

image.png

单例,多例模式就说到这里,下篇文章着重详解懒汉模式,饿汉模式。

相关文章
|
17天前
|
JSON 前端开发 Java
都说Spring MVC面试问烂了,可是很多人工作三年还是不懂!
大家找工作时,涉及框架面试问题时,常会被问及框架的原理及工作流程。所以本 Chat 通过带着大家一起来自己写一个 Struts2 框架(同理SpringMVC框架 ),亲身体验下框架的实现流程及工作原理!
32 0
|
17天前
|
监控 Java 应用服务中间件
Spring Boot 源码面试知识点
【5月更文挑战第12天】Spring Boot 是一个强大且广泛使用的框架,旨在简化 Spring 应用程序的开发过程。深入了解 Spring Boot 的源码,有助于开发者更好地使用和定制这个框架。以下是一些关键的知识点:
32 6
|
17天前
|
存储 缓存 Java
明知面试要问spring循环依赖,很多人还是搞不懂!
Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官!
35 0
|
15天前
|
XML 前端开发 JavaScript
《浅谈架构之路:前后端分离模式》,面试篇2015校园招聘求职大礼包
《浅谈架构之路:前后端分离模式》,面试篇2015校园招聘求职大礼包
|
15天前
|
安全 Java 数据库
Spring boot 入门教程-Oauth2,java面试基础题核心
Spring boot 入门教程-Oauth2,java面试基础题核心
|
15天前
|
负载均衡 监控 Java
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
|
17天前
|
设计模式
大厂求职者必看!如何用简单工厂模式征服面试官?
大厂求职者必看!如何用简单工厂模式征服面试官?
14 0
|
17天前
|
监控 Java 数据库连接
总结Spring Boot面试知识点
Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用的初始搭建以及开发过程。通过提供“约定优于配置”的方式,Spring Boot可以帮助开发者快速构建出生产级别的Spring应用。
18 0
|
17天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
113 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
17天前
|
SQL Java 数据库连接
这些年背过的面试题——Spring篇
对技术人来说,面试成功的道路只有一条,就是好好准备技术基础。本文是面试系列文章Spring篇,作者把自己的八股文和一些经验总结汇总在一起,供大家参考。