Spring中默认生成的bean是全局的而且将只有一个实例,测试代码如下:
@Configuration
public class GlobalConfig {
@Bean
public ThreadPoolTaskExecutor defaultThreadPool(){
ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
executor.setCorePoolSize(16);
executor.setMaxPoolSize(64);
executor.setQueueCapacity(16);
executor.setThreadNamePrefix("test");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setKeepAliveSeconds(60);
executor.initialize();
return executor;
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class CachedemoApplicationTests {
// 引入对应的对象内容
@Resource(name = "defaultThreadPool")
private ThreadPoolTaskExecutor executor;
@Resource(name = "defaultThreadPool")
private ThreadPoolTaskExecutor executor1;
@Before
public void test1() {
System.out.println(executor1.toString());
}
@Test
public void test() {
System.out.println(executor.toString());
}
}
返回结果:
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@11e355ca
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@11e355ca
如果要时的Spring开启多例模式,要增加
@Configuration
public class GlobalConfig {
@Bean
@Scope("prototype")
public ThreadPoolTaskExecutor defaultThreadPool(){
ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
executor.setCorePoolSize(16);
executor.setMaxPoolSize(64);
executor.setQueueCapacity(16);
executor.setThreadNamePrefix("test");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setKeepAliveSeconds(60);
executor.initialize();
return executor;
}
}
返回结果:
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@43984213
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor@2ff7a7
本文通过示例展示了Spring框架中Bean的默认作用域为单例,并介绍了如何配置Bean为多例模式。通过测试代码对比了单例和多例模式下Bean实例的差异。
1426





