admin管理员组

文章数量:1438821

Spring中Bean的作用域和生命周期

bean 的六种作用域

Bean 的作用域是指 Bean 在 Spring 框架中的某种行为模式,比如单例作用域,在spring中只有一份是全局共享的

作用域

说明

singleton

每个SpringIoC容器内同名称的bean只有一个实例(单例)(默认)

prototype

每次使用该bean时会创建新的实例(非单例)

request

每个HTTP 请求⽣命周期内, 创建新的实例(web环境中, 了解)

websocket

每个WebSocket⽣命周期内, 创建新的实例(web环境中, 了解)

session

每个HTTP Session⽣命周期内, 创建新的实例(web环境中, 了解)

application

每个ServletContext⽣命周期内, 创建新的实例(web环境中, 了解)

下面通过看每个对象的地址来查看,Dog对象的某种行为模式

单例作用域:

每个SpringIoC容器内同名称的bean只有一个实例

代码语言:javascript代码运行次数:0运行复制
@Autowired
    ApplicationContext context;

    @Resource(name = "singleDog")
    Dog singleDog;




    @RequestMapping("/singleton")
    public String singleton(){
        Dog contextDog = context.getBean("singleDog",Dog.class);
        return "contextDog: " + contextDog + " resources: " + singleDog;
    }

prototype:原型作用域

** 每次使用该bean时会创建新的实例**

代码语言:javascript代码运行次数:0运行复制
@Bean
    @Scope("prototype")
    public Dog prototypeDog(){
        return new Dog();
    }

//从spring上下文获取
@RequestMapping("/prototy")
    public String prototy(){
        Dog contextDog = context.getBean("prototypeDog",Dog.class);
        return "contextDog: " + contextDog + " resources: " + singleDog;
    }

request:请求作用域:

每个HTTP 请求生命周期内, 创建新的实例

代码语言:javascript代码运行次数:0运行复制
@Bean
    @RequestScope
    public Dog requestDog(){
        return new Dog();
    }



//从spring上下文获取
    @RequestMapping("/request")
    public String request(){
        Dog contextDog = context.getBean("requestDog", Dog.class);
        return "contextDog:"+ contextDog + ", resources:" +requestDog;
    }

#

一级目录

session:会话作用域:

每个HTTP Session⽣命周期内, 创建新的实例

代码语言:javascript代码运行次数:0运行复制
@Bean
    @SessionScope
    public Dog sessionDog(){
        return new Dog();
    }



 //从spring上下文获取
    @RequestMapping("/session")
    public String session(){
        Dog contextDog = context.getBean("sessionDog", Dog.class);
        return "contextDog:"+ contextDog + ", resources:" +sessionDog;
    }

Application: 全局作用域 :

每个ServletContext生命周期内, 创建新的实例(web环境中, 了解)

代码语言:javascript代码运行次数:0运行复制
//原对象
@Bean
    @ApplicationScope
    public Dog applicationDog(){
        return new Dog();
    }




//从spring上下文获取
    @RequestMapping("/application")
    public String application(){
        Dog contextDog = context.getBean("applicationDog", Dog.class);
        return "contextDog:"+ contextDog + ", resources:" +applicationDog;
    }

Bean的生命周期

生命周期指的是⼀个对象从诞生到销毁的整个生命过程, 我们把这个过程就叫做⼀个对象的生命周期,bean对象生命周期可以分为5个部分

实例化

就是为Bean分配内存空间

属性赋值:

通过bean注入和装配的方式, 如@AutoWired,@resource

初始化:

执行各种通知,在AutowireCapableBeanFactory接口中有定义AbstractAutowireCapableBeanFactory和AbstractBeanFactory方法中实现

使用bean

销毁bean

销毁容器的各种⽅法, 如 @PreDestroy , DisposableBean 接口⽅法, destroymethod.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-20,如有侵权请联系 cloudcommunity@tencent 删除对象生命周期作用域spring容器

本文标签: Spring中Bean的作用域和生命周期