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

  • 相关阅读:
    Apache Tomcat的安装与配置
    2007年东软校园招聘笔试题(山东大学)
    成功修复U盘,狂喜中~哈哈哈!!!
    检测和修复U盘的一般过程(一、软检测篇)
    在 hp3172宽屏笔记本上安装windowsXP+solaris10 双系统(1)--环境准备篇
    递归法查找假硬币
    把ppt转换为word的一段脚本
    2007年11月神州数码软件工程师(网络公司)招聘笔试题目
    不能正常使用oracle的解决办法(Oracle10g Express 版)
    光驱弹不出来怎么办?光驱弹不出来的简易解决办法。
  • 原文地址:https://www.cnblogs.com/xingjia/p/11190289.html
Copyright © 2011-2022 走看看