当前位置: 首页 > article >正文

Bean 的六种作用域

Bean 的六种作用域

  • .
  • Bean的作用域
  • 属性注入和content获取Bean
    • 单例作用域:http://127.0.0.1:8080/single1
    • 多例作用域: http://127.0.0.1:8080/prototype
    • 请求作用域: http://127.0.0.1:8080/request
    • 会话作用域: http://127.0.0.1:8080/session
    • Application作用域: http://127.0.0.1:8080/application

.

在这里插入图片描述

Bean的作用域

作用域说明
singleton单例作用域, 每个Spring IoC容器内同名称的bean只有⼀个实例(单例)(默认)
prototype原型作用域,每次使用该bean时会创建新的实例(非单例)
request请求作用域 ,每个HTTP 请求生命周期内, 创建新的实例(web环境中)
session会话作用域 ,每个HTTP Session生命周期内, 创建新的实例(web环境中)
application全局作用域,每个ServletContext生命周期内, 创建新的实例(web环境中)
websocketHTTP WebSocket 作用域 ,每个WebSocket生命周期内, 创建新的实例(web环境中)
package com.example.demo.config;

import com.example.demo.model.User;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.web.context.annotation.ApplicationScope;
import org.springframework.web.context.annotation.RequestScope;
import org.springframework.web.context.annotation.SessionScope;

@Configuration
public class BeanConfig {
    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
    public User single1(){
        return new User();
    }
    @Bean
    public User single2(){
        return new User();
    }
    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public User prototype(){
        return new User();
    }
    @Bean
    @RequestScope
    public User request(){
        return new User();
    }
    @Bean
    @SessionScope
    public User session(){
        return new User();
    }
    @Bean
    @ApplicationScope
    public User application(){
        return new User();
    }
}
package com.example.demo.controller;

import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private User single1;
    @Autowired
    private User single2;
    @Autowired
    private User prototype;
    @Autowired
    private User request;
    @Autowired
    private User session;
    @Autowired
    private User application;

    @Autowired
    ApplicationContext applicationContext;
    @RequestMapping("/single1")
    public String single1(){
        User user = (User) applicationContext.getBean("single1");
        return user.toString()+single1.toString();
    }
    @RequestMapping("/single2")
    public String single2(){
        User user = (User) applicationContext.getBean("single2");
        return user.toString()+single2.toString();
    }
    @RequestMapping("/prototype")
    public String prototype(){
        User user = (User) applicationContext.getBean("prototype");
        return user.toString()+prototype.toString();
    }@RequestMapping("/request")
    public String request(){
        User user = (User) applicationContext.getBean("request");
        return user.toString()+request.toString();
    }@RequestMapping("/session")
    public String session(){
        User user = (User) applicationContext.getBean("session");
        return user.toString()+session.toString();
    }@RequestMapping("/application")
    public String application(){
        User user = (User) applicationContext.getBean("application");
        return user.toString()+application.toString();
    }
}

属性注入和content获取Bean

我们可以通过浏览器可以访问上述代码中的url,每个请求都至少请求两次
可以得到以下结论:

单例作用域:http://127.0.0.1:8080/single1

多次访问, 得到的都是同⼀个对象, 并且 @Autowired 和applicationContext.getBean() 也是同⼀个对象.
在这里插入图片描述

多例作用域: http://127.0.0.1:8080/prototype

applicationContext.getBean()每次获取的对象都不⼀样,属性注入的对象在Spring容器启动时, 就已经注入了, 所以多次请求也不会发生变化
在这里插入图片描述
在这里插入图片描述

请求作用域: http://127.0.0.1:8080/request

在每⼀次请求中, @Autowired 和 applicationContext.getBean() 都是同⼀个对象.
但是每次请求, 都会重新创建对象
在这里插入图片描述
在这里插入图片描述

会话作用域: http://127.0.0.1:8080/session

在⼀个session中, 多次请求, 获取到的对象都是同⼀个
在这里插入图片描述
换⼀个浏览器访问, 发现会重新创建对象.(另⼀个Session)
在这里插入图片描述

Application作用域: http://127.0.0.1:8080/application

在⼀个应用中, 多次访问都是同⼀个对象,即使是不同的浏览器
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/233158.html

相关文章:

  • 链游系统定制化开发:引领游戏产业的新时代
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
  • Vite初始化Vue3+Typescrpt项目
  • 工业相机选取
  • 管家婆财贸ERP BB045.销售批量收款
  • Java Stream 流常用操作大全
  • 破除Github API接口的访问次数限制
  • Android 车载应用开发之车载操作系统
  • Flink cdc3.0动态变更表结构——源码解析
  • Spring 开发 pom.xml 配置文件(通用配置)
  • C++类和对象(7)
  • 【k8s系列】(202402) 证书apiserver_client_certificate_expiration_seconds
  • 龙芯开启ssh服务——使用Putty连接
  • Web后端开发:事务与AOP
  • PHP、Python、Java 和 Go语言对比
  • 【详解】斗地主随机发牌项目
  • GeoServer 2.11.1升级解决Eclipse Jetty 的一系列安全漏洞问题
  • 突破编程_C++_基础教程(类的基础知识)
  • 解密输入输出迷局:蓝桥杯与ACM中C++/C语言常见问题揭秘
  • 【Java八股面试系列】JVM-常见参数设置
  • 【网工】华为设备命令学习(Telnet)
  • 【51单片机】外部中断和定时器中断
  • 【C/C++】整数及乘积的溢出问题
  • CSS综合案例4
  • Vue ElementUI中el-table表格嵌套样式问题
  • github和gitee