JAVA全系列 教程
3762个小节阅读:7088.9k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
因为SimpleThreadScope是Spring框架内置实现Scope实现的实现类,我们就模仿它,写一个类。
SimpleThreadScope 表示的含义是在同一个线程内,多次获取都是单例的。
首先在配置文件注册这个Scope。
xxxxxxxxxx
<!-- CustomScopeConfigurer 是Spring框架中提供的注册 -->
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<!-- key 的值是自定义的,此处叫什么,下面people2的scope中就多一个什么值 -->
<entry key="thread123">
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>
<!-- 指定people2的scope为thread123 -->
<bean id="people2" class="com.bjsxt.scope.People" scope="thread123">
<property name="name" value="smallming"></property>
</bean>
在测试类中,在不同线程内查看获取到的对象是否是同一个对象。
xxxxxxxxxx
@Autowired
ApplicationContext ac;
@Test
void test2(){
People p1 = ac.getBean("people2", People.class);
new Thread(){
@Override
public void run() {
People p2 = ac.getBean("people2", People.class);
System.out.println("p2:"+p2);
System.out.println("p1:"+p1);
System.out.println("p1==p2:"+(p1==p2)); // 结果为false
}
}.start();
People p3 = ac.getBean("people2", People.class);
System.out.println("p1==p3:"+(p1==p3)); // 结果为true
}