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容器中.
啥意思呢?
配置