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实例,只初始化对象。

  • 相关阅读:
    Spring整合MyBatis(一)MyBatis独立使用
    Spring AOP源码分析(三)创建AOP代理
    Spring AOP源码分析(二)动态A0P自定义标签
    Spring AOP源码分析(一)使用示例
    JDK(十)JDK1.7&1.8源码对比分析【集合】ConcurrentHashMap
    JDK(九)JDK1.7源码分析【集合】HashMap的死循环
    JDK(八)JDK1.7&1.8源码对比分析【集合】HashMap
    MySQL(五)SELECT语句执行顺序
    版本控制器:SVN
    springmvc
  • 原文地址:https://www.cnblogs.com/yefengyu/p/5118408.html
Copyright © 2011-2022 走看看