一、@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 属性:

posted on 2021-11-13 11:16  格物致知_Tony  阅读(71)  评论(0)    收藏  举报