Java 如果可以';不使用依赖注入?

Java 如果可以';不使用依赖注入?,java,design-patterns,Java,Design Patterns,我目前正在处理一项任务,每当向服务器发出新的HTTP请求时,就会创建一个处理程序实例。此处理程序将保存处理HTTP请求的逻辑。需要此背景信息来注意,将为每个请求创建一个新的处理程序实例。我无法改变这一点,因为这正是架构的构建方式 现在,我有一个场景,我想在这个处理程序的逻辑中使用ExecutorService(比如newFixedThreadPool)。由于每次都会创建处理程序的新实例,因此我无法在处理程序类中执行以下操作: private static final ExecutorServic

我目前正在处理一项任务,每当向服务器发出新的HTTP请求时,就会创建一个处理程序实例。此处理程序将保存处理HTTP请求的逻辑。需要此背景信息来注意,将为每个请求创建一个新的处理程序实例。我无法改变这一点,因为这正是架构的构建方式

现在,我有一个场景,我想在这个处理程序的逻辑中使用ExecutorService(比如
newFixedThreadPool
)。由于每次都会创建处理程序的新实例,因此我无法在处理程序类中执行以下操作:

private static final ExecutorService MY_EXECUTOR = ExecutorService.newFixedThreadPool(5);
这将是毫无意义的,因为每一个请求都会执行该行

我最初的解决方案是使用另一个类来保存对ExecutorService的引用,然后将该实例注入处理程序。不幸的是,我无法将任意类注入处理程序(同样,由于体系结构的原因)

考虑到这些限制,我如何拥有可重用的ExecutorService?
这是我唯一能想到的:

public final class HandlerHelper {

    private static final ExecutorService MY_EXECUTOR = ExecutorService.newFixedThreadPool(5);

    private HandlerHelper() { }

    public ExecutorService getExecutorService () { return MY_EXECUTOR; }
}
然而,这很难看。所以我希望有人能帮我做一个更好的设计


现在我想了想,我可以这样做:

class Handler {

    private static final ExecutorService MY_EXECUTOR;

    static {
        MY_EXECUTOR = ExecutorService.newFixedThreadPool(5);
    }
}

不确定哪种方法更好(如果其中任何一种都是好的)。

现在我想了想,我可以这样做吗?是的,你可以。ExecutorService使用静态关键字是线程安全的。更详细的讨论第一行是如何以最小的工作量管理特定的资源池。