• 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对象,而且只会在第一次获取的时候才会创建.

  • 相关阅读:
    2.列出目录内容
    mongo2csv
    Python-uiautomator使用说明文档
    uiautomator设备和选择器~Python详解
    hadoop1.2开发环境搭建
    postgresql 查询某一个表中的所有字段
    VolgaCTF 2020 Qualifier Library
    VolgaCTF 2020 Qualifier Newsletter
    2019-2020-2 网络对抗技术 20175211 Exp3 免杀原理与实践
    BJDCTF 2nd Writeup
  • 原文地址:https://www.cnblogs.com/xingjia/p/11190289.html
Copyright © 2020-2023  润新知