zoukankan      html  css  js  c++  java
  • (一)IOC 容器:【3】@Scope 设置组件作用域

    注解

    @Scope
    使用 @Scope 来调整组件的作用域

    ConfigurableBeanFactory#SCOPE_PROTOTYPE prototype
    ConfigurableBeanFactory#SCOPE_SINGLETON singleton
    org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST request
    org.springframework.web.context.WebApplicationContext#SCOPE_SESSION session

    prototype:多实例的
    IOC 容器启动并不会调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象

    singleton:单实例的(默认值)
    ioc 容器中会调用方法创建对象放到 ioc 容器中,以后每次获取就是直接从容器中拿
    request:同一次请求创建一个实例
    session:同一个 session 创建一个实例

      

    一、@Scope 调整组件作用域

      创建一个配置类,在里面注册一个 Person 对象:

    @Configuration
    public class MainConfig2 {
    
        @Bean(value = "person")
        public Person person() {
            System.out.println("给容器中添加 Person 对象。。。");
            return new Person("王五", 20);
        }
    }

      

      该组件在 IOC 容器中默认都是单例的:

        @Test
        public void test02() {
            ApplicationContext ioc = new AnnotationConfigApplicationContext(MainConfig2.class);
    
            System.out.println("IOC容器创建完成");
            Person bean = (Person) ioc.getBean("person");
            Person bean2 = (Person) ioc.getBean("person");
            System.out.println(bean == bean2);  //true
        }

      在Spring的 IOC 容器中,默认的 Bean 都是单例的,可以设置 @Scope 注解来进行修改。

    @Configuration
    public class MainConfig2 {
    
    
        /*
            使用 @Scope 来调整组件的作用域
    
    
            ConfigurableBeanFactory#SCOPE_PROTOTYPE         prototype
            ConfigurableBeanFactory#SCOPE_SINGLETON         singleton
            org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST     request
            org.springframework.web.context.WebApplicationContext#SCOPE_SESSION     session
    
            prototype:多实例的
                       IOC 容器启动并不会调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象
    
            singleton:单实例的(默认值)
                       ioc 容器中会调用方法创建对象放到 ioc 容器中,以后每次获取就是直接从容器中拿
            request:同一次请求创建一个实例
            session:同一个 session 创建一个实例
    
         */
        //默认是单实例的
        @Scope("prototype")
        @Bean(value = "person")
        public Person person() {
            System.out.println("给容器中添加 Person 对象。。。");
            return new Person("王五", 20);
        }
    }

      其实 @Scope 注解 等价于 bean 标签中的 scope 属性:

  • 相关阅读:
    IOS中UIImage用代码压缩
    自定义UILabel设置垂直方向的居上,居中,居下
    IOS开发之数据加密与解密:AES256+Base64转码
    IOS开发之网络数据Json处理
    Unity3d中CharacterController的移动和碰撞分析
    关于Unity3d中物体之间碰撞检测的方法
    WPF 调用Win32控件
    C# 扩展方法
    颜色空间转换 RGB到HSV
    加速计算技术-- Intel 的IPP库
  • 原文地址:https://www.cnblogs.com/niujifei/p/15547546.html
Copyright © 2011-2022 走看看