随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、@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   格物致知_Tony  阅读(59)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示

目录导航