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 属性:

  • 相关阅读:
    事件冒泡
    Tomcat 不能正常启动
    mybatis(非常详细的哦~~~~)
    javadoc 工具生成开发API文档
    Java 泛型
    Tomcat 服务器详解
    J2EE 工作中注意事项
    Java 枚举
    Break,Continue,Return
    位运算符
  • 原文地址:https://www.cnblogs.com/niujifei/p/15547546.html
Copyright © 2011-2022 走看看