Spring学习笔记3 Spring对IOC的实现_biubiubiu0706的博客-CSDN博客
新建模块
spring-004
引入依赖
 
 <dependencies>
    <!--Spring依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.10</version>
    </dependency>
    <!--junit单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
    <!--Log4j2依赖-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.19.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.19.0</version>
    </dependency>
</dependencies>
 
 
 
 


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


scope有两个属性 1.singleton 2.prototype
默认情况下是singleton(单例的),在容器初始化时候就将bean对象放入容器
prototype:是多例的,初始化容器时候不会创建bean,而是调用getBean方法时候才初始化bean


事实上scope还有其他选项
比如说一次请求一个scope 一次会话一个scope 为什么这里scope只有singleton和prototype两个选项 原因在于没有引入web框架
例如
在pom.xml中引入Springmvc依赖
 
 <!--引入web框架,例如SpringMVC-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>6.0.10</version>
</dependency> 
 
再看scope里面的提示: request 和 session 要求项目必须是一个web应用
request:一次请求一个bean
session:一次会话一个bean

事实上scope总共有8个值

还可以自定义scope
举例:自定一个Scope,线程级别的Scope,在同一个线程中,让获取的Bean是同一个.跨线程则不是同一个.
步骤:
1.自定Scope需要实现Scope接口:
spring内置了线程范围的类:org.springframework.context.support.SimpleThreadScope.可以
直接使用
2.将自定义的Scope注册到Spring容器中.
啥意思呢?


配置






















