我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring bean配置单例或多例模式方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring bean配置单例或多例模式方式

Spring bean配置单例或多例模式

单例

spring bean 默认是单例默认,在对应.xml文件中的配置是:

<bean id="user" class="..." scope="singleton"/>

singleton就是配置这个bean是否是单例的,如果不写,就是默认值true。

单例模式:每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例

单例模式分为饿汉模式和懒汉模式, 

饿汉模式spring singleton的缺省是饿汉模式:启动容器时(即实例化容器时),为所有spring配置文件中定义的bean都生成一个实例
懒汉模式在第一个请求时才生成一个实例,以后的请求都调用这个实例spring singleton设置为懒汉模式:<beansdefault-lazy-init="true">

多例

配置多例:

<bean id="user" class="..." scope="prototype"/>

多例模式:任何一个实例都是新的实例,调用getBean时,就new一个新实例

Spring scope配置单例、多例模式

1、scope属性介绍

scope="“是标签的一个属性,作用是:控制对象的作用范围(单例、多例模式)

取值:scope=”"是标签的一个属性,作用是:控制对象的作用范围(单例、多例模式)

    当时导入包spring-mvc和包spring-mvc-portlet可以使用下列值(web应用):

    • request:当每次请求时实例化。
    • session:当在一个session周期内,对象时单例的。
    • globalSession:依赖包spring-mvc-portlet,类似于session.
    • application:在一个application对象内是单例的。
    • singleton:默认值,单例模式;
    • prototype:多例,每次获取对象都会重新实例化;

    所需包:

    在这里插入图片描述

    2、scope配置

    Application.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
        <bean id="user" class="Model.User" scope="singleton">
            <aop:scoped-proxy/>
        </bean>
    </beans>
    

    3、单例模式底层实现模拟

    3.1、 模拟单例模式 — 懒汉式

    **懒汉式的优点是:**

    1、提升运行效率;

    2、实现数据共享,例如application对象,application对象单例模式,在程序启动,对象实例化之后,程序结束之前,实例化的对象都可以实现共享。

    懒汉式的缺点是:使用了多线程锁机制,导致效率低。

    实现:

    package SingleTon;
    public class SingleTon {
        private static SingleTon singleTon;
        
        private SingleTon(){
        }
        
        public static SingleTon getInstance(){
            
            if(singleTon == null){
                
                synchronized(SingleTon.class){
                    
                    if(singleTon == null){
                        new SingleTon();
                    }
                }
            }
            return singleTon;
        }
    }
    

    3.2、饿汉式:优点是解决了懒汉式效率低的缺点。

    package SingleTon;
    
    public class SingleTon2 {
        
        private static SingleTon2 singleTon2 = new SingleTon2();
        
        private SingleTon2(){}
        
        public static SingleTon2 getInstance(){
            return singleTon2;
        }
    }
    

    3.3、测试方法:

    package SingleTon;
    public class Test {
        public static void main(String[] args) {
            SingleTon singleTon = SingleTon.getInstance();
            System.out.println(singleTon);
        }
    }
    

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Spring bean配置单例或多例模式方式

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Spring Bean获取方式的实例化方式详解

    工作中需要对一个原本加载属性文件的工具类修改成对数据库的操作当然,ado层已经写好,但是需要从Spring中获取bean,然而,工具类并没有交给Spring来管理,所以需要通过方法获取所需要的bean。于是整理了Spring获取bean的几种方法
    2023-03-09

    Spring实例化bean的方式有哪些

    这篇文章主要介绍了Spring实例化bean的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring实例化bean的方式有哪些文章都会有所收获,下面我们一起来看看吧。一、bean实例化&mdash
    2023-07-02

    Spring Bean实例化方式怎么实现

    这篇“Spring Bean实例化方式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring Bean实例化方式
    2023-07-05

    Python 中用多种方式实现单例模式

    单例模式是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在,本文给大家分享Python 实现单例模式的五种写法,感兴趣的朋友一起看看吧
    2022-11-16

    Spring Boot配置方式的示例分析

    这篇文章给大家分享的是有关Spring Boot配置方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配
    2023-05-30

    Spring中实例化bean的方式有哪些

    这篇文章主要为大家展示了“Spring中实例化bean的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring中实例化bean的方式有哪些”这篇文章吧。前言在介绍Bean的实例化的
    2023-05-30

    Docker网络模式及配置方式的示例

    这篇文章将为大家详细讲解有关Docker网络模式及配置方式的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Docker网络模式docker run 创建 Docker 容器时,可以用 –net 选
    2023-06-14

    spring的单例模式如何现实

    在Spring中,有多种方式来实现单例模式:默认的单例模式:Spring容器默认情况下会将所有声明为Bean的对象作为单例对象进行管理。当一个Bean被声明为单例时,在容器启动阶段会创建该Bean的实例,并且将该实例放入Spring容器的B
    spring的单例模式如何现实
    2024-02-29

    详解Spring中bean实例化的三种方式

    今天我想来说说如何通过xml配置来实例化bean,其实也很简单。 使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建、静态工厂创建、实例工厂创建,OK,那么接下来我们来分别看看这几种方式。普通构造方法创建这种创建方式使我们
    2023-05-31

    spring中bean实例化的三种方式 -- Spring入门(二)

    文章目录 前言1.Bean实例化简介2.bean的实例化 -- 构造方法3.bean的实例化 -- 静态工厂实例化4.bean实例化 -- 实例工厂和FactoryBean5.三种bean实例化方式的区别 总结 前言 为了
    2023-08-19

    NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】

    本文实例讲述了NodeJS设计模式。分享给大家供大家参考,具体如下: 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直接返回,若不存在,则创建实例对象,并将实例对象保存在静态变量中,
    2022-06-04

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录