SpringBean作用域-创新互联

目录

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的敦煌网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

什么是作用域呢 ?

那什么又是Spring Bean的作用域呢 ?

Spring框架默认Bean作用域是什么呢 ?

Spring Bean的作用域都有哪些呢 ?

如何设置Bean作用域


什么是作用域呢 ?

在JavaSE中,作用域就是指一个变量可生效的范围. 就比如一个变量的作用域是方法的代码块的范围,只在方法内部生效.

那什么又是Spring Bean的作用域呢 ?

我来给一下官方的定义: Spring Bean的作用域是指Bean在整个框架中的某种行为模式.

看着这官方定义是有点懵 啥叫行为模式.

那就在举一个例子 : Singleton是单例作用域,那就是指对于一个Bean,它在整个Spring框架中只存在一份,是全局的共享的,如果要操作这个Bean,所有人都操作这一份Bean.

也就是当一个人将这个Bean被修改了,其他人读取到的就是被修改之后的值.

Spring框架默认Bean作用域是什么呢 ?

我们来实战演练一把,通过这个示例就可以知道Spring默认Bean 作用域是什么了.

有一个Bean为commonBean,假设张三来写一个类来初始化这个Bean然后将Bean存储到Spring中,李四去新创建一个对象来引用这个公共Bean(commonBean),然后使用并修改,王五要使用这个公共的Bean.

commonBean

public class CommonBean {
    //创建一个公共的对象供给两个人去使用
    private String name;
    private int age;
    private int id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "CommonBean{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
}

张三来写一个类来初始化这个Bean然后将Bean存储到Spring中

@Controller
public class CommonScope {
    //公共的类->供给其他人使用
    //使用Bean注解将公共类返回的公共Bean存到Spring中
    @Bean
    public CommonBean doCommonBean(){
        CommonBean commonBean = new CommonBean();
        commonBean.setName("Java");
        commonBean.setAge(19);
        commonBean.setId(2000);
        return commonBean;
    }
}

李四去新创建一个对象来引用这个公共Bean(commonBean),然后使用并修改

@Controller
public class ScopeController1 {
    @Autowired
    private CommonBean commonBean;

    public void doScopeController1() {
        //李四自己创建一个对象引用公共的Bean
        CommonBean commonBean1 = commonBean;
        System.out.println("修改前的数据" + commonBean);
        commonBean1.setName("C++");
        System.out.println("修改后的数据" + commonBean1);
    }
}

王五要使用这个公共的Bean.

@Controller
public class ScopeController2 {

    @Autowired
    private CommonBean commonBean;

    public void doScopeController2(){
        System.out.println("使用公共的Bean信息为 : " + commonBean);
    }
}

启动类进行使用

public class App {
    //启动类
    public static void main(String[] args) {
        //获取到SpringContext上下文对象
        ApplicationContext context1 = new ClassPathXmlApplicationContext
                ("spring-config.xml");
        System.out.println("=================================");
        ScopeController1 scopeController1 = context1.getBean("scopeController1", ScopeController1.class);
        scopeController1.doScopeController1();
        System.out.println("=================================");
        ScopeController2 scopeController2 = context1.getBean("scopeController2", ScopeController2.class);
        scopeController2.doScopeController2();
    }
}

这个时候就会有情况发生我们接下来看运行结果

所以从这里就可以知道Spring框架默认Bean的作用域就是单例作用域.

Spring Bean的作用域都有哪些呢 ?

Spring一共有6种作用域.Spring在为Bean初始化的时候就会设置作用域.

分别为下面6种作用域

  • 单例作用域(singleton)

单例作用域是Spring默认的作用域.

单例作用域下 : Bean在SpringIOC容器只存在一个实例,也就是获取Bean(context.getBean())和注入/装配Bean(比如AutoWired注入3)操作Bean的都是同一个Bean

适用场景 : 单例作用域一般适用于无状态的Bean(Bean的状态不需要更新).

  • 多例作用域(prototype)

多例作用域也叫原型作用域

对于一个Bean,每次访问这个Bean都会创建新的实例.

也就是在Spring中获取Bean(context.getBean())或者注入Bean(AutoWired注入Bean)操作的这个Bean都是新创建的Bean

适用场景 : 多例作用域一般适用于有状态的Bean(Bean的状态需要更新).

  • 请求作用域(request)

在请求作用域下,每次HTTP请求都会创建新的Bean实例.

这个与prototype类似 但是不相同 prototype是每次访问Bean就创建,而request是每次HTTP请求创建新的实例(每次HTTP请求也可能访问多个Bean)

适用场景 : 请求作用域在Spring MVC场景下才能够生效 适用于一次HTTP请求共享Bean

  • 会话作用域(session)

在会话作用域下,每次session会话都会创建一个新的实例

适用场景 : 请求作用域在Spring MVC场景下才能够生效,适用于在一次会话共享Bean

  • 全局作用域(Application)

在一个Http Servlet Context 中创建一个实例

适用场景 : 请求作用域在Spring MVC场景下才能够生效,适用于Web应用的上下文信息

  • WebSocket(了解即可)

在一个HTTP WebSocket的生命周期中,创建新的实例

适用场景 : 请求作用域在Spring MVC场景下才能够生效,WebSocket的每次会话中,保存了⼀个Map结构的头信息,将⽤来包裹客户端消息头。第⼀次初始化后,直到WebSocket结束都是同⼀个Bean

在Bean初始化的时候,就会为Bean设置其作用域.

Spring共有6种作用域

其中单例作用域和多例作用域在Spring框架中使用

请求作用域,会话作用域,全局作用域,WebSocket 只有在SpringMVC框架中才会生效.

如何设置Bean作用域

有两种方式设置Bean的作用域

第一种是直接设置值

比如我们来设置多例作用域

第二种是通过枚举的方式

比如我们来设置多例作用域

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

本文题目:SpringBean作用域-创新互联
文章URL:https://www.cdcxhl.com/article12/ddjogc.html

成都网站建设公司_创新互联,为您提供网站建设自适应网站建站公司网站设计网站维护关键词优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司