zoukankan      html  css  js  c++  java
  • Spring 学习笔记 7. 尚硅谷_佟刚_Spring_Bean 的作用域

    1,理论

    •在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.

    •默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用域被称为 singleton, 它是所有 Bean 的默认作用域.

    image

    2,实践

    package com.zsq;
    
    public class Car {
        private String brand;
        private double price;
        public String getBrand() {
            return brand;
        }
        public void setBrand(String brand) {
            this.brand = brand;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        @Override
        public String toString() {
            return "Car [brand=" + brand + ", price=" + price + "]";
        }
        
    
    }

    配置文件

    <bean id="car" class="com.zsq.Car"  p:brand="audi" p:price="22222"></bean>

    主方法

    package com.zsq;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-autowire.xml");
    
            Car car = (Car) ctx.getBean("car");
            Car car1 = (Car) ctx.getBean("car");
            System.out.println(car == car1);
        }
    
    }

    结果返回的是:

    image

    其实在配置文件中,默认的作用域是单例模式的就是使用singleton。

    image

    因此每次创建一个Car对象,其实都是产生一个实例

    image

    从上面我们也看到scope还有其他的属性值,其中第一个prototype意思是原型。指的是每次创建一个对象的时候都会产生一个实例。

    这个时候结果就不一样了:

    image

    在Car类代码中加一个无参的构造函数。

    image

    在singleton模式下:

    image

    再看一个:

    image

    这说明在singleton模式下,在没有创建对象之前就已经初始化了。

    在prototype模式下

    image

    image

    image

    以上结果显示在原型模式进行创建对象时候,不初始化bean实例,只初始化对象。

  • 相关阅读:
    Windows:生成环境Word,PPT,EXCEL com+组件配置
    Win10 计算机管理 打不开应急办法
    Js:弹窗剧中
    Asp.net跨域配置
    Centos6系列安装nginx
    Win_oracle_exp/expdp备份
    MSSQL:查看某个账号使用得数据库
    MSSQL:查看作业情况
    MSSQL:账号无法删除方案
    MSSQL:删除系统作业计划
  • 原文地址:https://www.cnblogs.com/yefengyu/p/5118408.html
Copyright © 2011-2022 走看看