(一)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 属性:

原文地址:https://www.cnblogs.com/niujifei/p/15547546.html