Dependency injection 使用静态方法的服务定位器

Dependency injection 使用静态方法的服务定位器,dependency-injection,dependencies,Dependency Injection,Dependencies,在我正在进行的项目代码中,我遇到了一种奇怪的方法 UI层使用一种服务定位器获取依赖关系,该定位器是一个具有静态方法的类: public class ServiceManager { public static MailService getMailService() { ... } public static UserInfoService getUserInfoService() { ... } ... } 此类“分

在我正在进行的项目代码中,我遇到了一种奇怪的方法

UI层使用一种服务定位器获取依赖关系,该定位器是一个具有静态方法的类:

public class ServiceManager {

    public static MailService getMailService() {
        ...
    }

    public static UserInfoService getUserInfoService() {
        ...
    }
    ...
}
此类“分布”的依赖项使用Spring框架注入其中

这种做法的原因可能是什么?我只能看到不利的一面。由于定位器方法是静态的,因此没有接口。由于缺少接口,很难对类的用途进行推理。这个类的客户机与它紧密耦合(记住,这里没有接口),使得它们不可能在其他地方重用


让Spring直接在UI类中注入依赖项不是更好吗?

对于大多数UI框架,在UI类中使用构造函数注入通常非常困难(如果不是不可能的话)。在这种情况下,恢复到服务定位器模式是很常见的,但在UI类中只有-我重复

+1如果您不控制对象实例化,但需要将依赖关系恢复到该对象中,除了恢复到服务定位器模式之外,您没有其他选择。