Spring学习笔记4 Bean的作用域

Spring学习笔记3 Spring对IOC的实现_biubiubiu0706的博客-CSDN博客

新建模块

spring-004

引入依赖


    
    
        org.springframework
        spring-context
        6.0.10
    
    
    
        junit
        junit
        4.13.2
        test
    

    
    
        org.apache.logging.log4j
        log4j-core
        2.19.0
    
    
        org.apache.logging.log4j
        log4j-slf4j-impl
        2.19.0
    

 Spring学习笔记4 Bean的作用域_第1张图片

Spring学习笔记4 Bean的作用域_第2张图片

Spring学习笔记4 Bean的作用域_第3张图片

Spring默认情况下Bean都是单例的(单例:singleton),且在Spring上下文初始化的时候实例化
每次调用 getBean()方法时候,都返回同一个单例对象

 Spring学习笔记4 Bean的作用域_第4张图片

如果改成 scope="prototype"

Spring学习笔记4 Bean的作用域_第5张图片

Spring学习笔记4 Bean的作用域_第6张图片

scope有两个属性  1.singleton            2.prototype

默认情况下是singleton(单例的),在容器初始化时候就将bean对象放入容器

prototype:是多例的,初始化容器时候不会创建bean,而是调用getBean方法时候才初始化bean

Spring学习笔记4 Bean的作用域_第7张图片Spring学习笔记4 Bean的作用域_第8张图片

事实上scope还有其他选项

比如说一次请求一个scope     一次会话一个scope  为什么这里scope只有singleton和prototype两个选项    原因在于没有引入web框架

例如

在pom.xml中引入Springmvc依赖


    org.springframework
    spring-webmvc
    6.0.10

再看scope里面的提示:     request 和  session  要求项目必须是一个web应用

request:一次请求一个bean

session:一次会话一个bean

Spring学习笔记4 Bean的作用域_第9张图片

事实上scope总共有8个值

Spring学习笔记4 Bean的作用域_第10张图片

还可以自定义scope

举例:自定一个Scope,线程级别的Scope,在同一个线程中,让获取的Bean是同一个.跨线程则不是同一个.

步骤:

1.自定Scope需要实现Scope接口:

        spring内置了线程范围的类:org.springframework.context.support.SimpleThreadScope.可以

        直接使用

2.将自定义的Scope注册到Spring容器中.

啥意思呢?

Spring学习笔记4 Bean的作用域_第11张图片

Spring学习笔记4 Bean的作用域_第12张图片

配置

Spring学习笔记4 Bean的作用域_第13张图片

Spring学习笔记4 Bean的作用域_第14张图片

Spring学习笔记4 Bean的作用域_第15张图片

你可能感兴趣的:(spring,学习,笔记)