自定义线程池中的initialize()方法有什么用?不写也没发现问题啊?-灵析社区

无敌奥特MEN

![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/0496f33aef46cfc1637e3f10f7fa1e7a.png) 我的配置如图,我没有配置初始化方法,使用起来没有问题,那这个initialize()方法有什么用?

阅读量:133

点赞量:0

问AI
先说结论:因为Spring帮你调用了这个方法 首先我们把这玩意单独拿出来用 public class SomeTest { public static void main(String[] args) { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.submit(() -> System.out.println("!")); } } 这里就会报错,"ThreadPoolTaskExecutor not initialized" 然后我们换一个姿势,就没有问题了 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Demo21Application.class, args); ThreadPoolTaskExecutor myExecutor = context.getBean("myExecutor", ThreadPoolTaskExecutor.class); myExecutor.submit(() -> System.out.println("hello!")); } @Bean public ThreadPoolTaskExecutor myExecutor() { return new ThreadPoolTaskExecutor(); } } 那么spring是怎么调用到这个方法呢,让我们打开 "ExecutorConfigurationSupport" @Override public void afterPropertiesSet() { initialize(); } 然后这个方法是在 "InitializingBean" 里定义的,熟悉 Spring Bean 生命周期的朋友们应该已经知道这是怎么回事了,简单说就是对bean的初始化完成之后进行的其他初始化工作