zoukankan      html  css  js  c++  java
  • Spring注解驱动第四讲--@Scope注解

    在Spring容器加载扫描的类时,可以通过@Scope注解来控制加载到容器中的Bean是单例还是多例

    @Scope注解中的属性值有以下几种

    singleton:单例,容器启动时创建Bean对象,且容器中只有一个实例.

    prototype:多例,容器启动时不去创建Bean对象,每当获取的Bean的时候容器才去创建一个新的Bean对象.

    request:同一次请求创建一个实例(web阶段时使用,本文不介绍)

    session:同一个session创建一个实例(web阶段时使用,本文不介绍)

    实例代码如下:

    1,创建配置类:

    @Configuration
    public class MainConfig2 {
        @Scope("singleton")//单例模式
        @Bean
        public Person getPerson() {
            System.out.println("容器开始创建bean.........");
            return new Person("张三",23);
        }
    
    }   

    2,创建测试类

    public class IOCTest {
        @Test
        public void test2() {
            ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);
         syso("加载容器完成"); Person person1
    = applicationContext.getBean(Person.class) ; Person person2 = applicationContext.getBean(Person.class) ; System.out.println(person1 == person2); } }

    运行结果:

    容器开始创建bean.........
    加载容器完成
    true

    如果将@Scope注解里面的的singleton改为prototype,再次运行

    运行结果:

    加载容器完成
    容器开始创建bean.........
    容器开始创建bean.........
    false

    通过两次运行结果,可以观察到prototype为容器加载完成后,每次调用时在创建,singleton为创建容器时就已经创建完成

    附加:

    在使用singleton的属性时(默认情况下).如果想在容器创建时不先创建Bean,而是在第一次获取的时候才创建,即赖加载.可以使用@Lazy注解.代码实现如下:

    @Configuration
    public class MainConfig2 {
        //默认情况下为单例模式
        @Lazy//启用懒加载
        @Bean
        public Person getPerson() {
            System.out.println("容器开始创建bean.........");
            return new Person("张三",23);
        }
    }

    运行结果:

    加载容器完成
    容器开始创建bean.........
    true

    可以发现,在创建完容器之后,获取Bean的时候才去创建Bean对象,而且只会在第一次获取的时候才会创建.

  • 相关阅读:
    kafka学习笔记:知识点整理
    ZooKeeper基本原理
    Channel详解
    redis十-对快照模式分析
    文字两行显示
    vue 脚手架创建新项目时报错 ERROR Failed to get response from http://registry.cnpmjs.org/vue-cli-version
    checkbox 点选后没有被选中,有点击事件,不显示小勾
    git 提示 没有操作权限
    HBuilder X 提示Setting.json格式语法错误
    格式化代码时提示错误
  • 原文地址:https://www.cnblogs.com/xingjia/p/11190289.html
Copyright © 2011-2022 走看看