春季引导。如何利用原型范围?

App*_*ler 0 java spring runnable spring-boot

我试图找到一种在Spring启动中创建优美的Runnable bean的方法。该应用程序的重点是提供一项服务,该服务将接收一些数据并启动受监视的外部过程。

在之前的尝试中,我只是形成一个常规new MyRunnable()并将其传递给执行服务。现在,我正在考虑如何在Spring环境中正确使用并使用@Scope("prototype")。

我确实找到了使用的示例,ApplicationContext.getBean(...)以及为什么Spring的ApplicationContext.getBean被认为是不好的更好的方法?,但我仍然无法正确理解如何new MyRunnable()根据一项服务来实际调用,这将遵循以下简单思想:

class MyService {
  public void triggerNewExternalTask() {
       ....
       executionService.run(new MyRunnable());
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 5

我相信您在这里走错了路。

Spring依赖项注入非常棒,但这并不意味着您永远不会new在编写正确的Spring Boot应用程序中找到对它的调用。

在这种情况下,调用new是正确的选择。启动时,Executor池中的每个实例都应具有自己的Runnable/ 实例Callable。

这对于任何方法范围的变量都是如此:最好在方法范围内实例化它,并在退出方法时让垃圾回收器将其清除。在这种情况下,没有理由让Spring负责bean的生命周期。

当您尝试共享Runnable实例时,您走得太远了,尤其是当它们具有状态时。