我有一组仅包含静态方法和单个私有构造函数的API类,因此它们无法实例化。但是,我希望第三方开发人员能够修改API的行为以满足他们的需求。
这是我目前为止的解决方案(通过静态setter方法进行依赖注入)。这是开发人员将使用的公共API类。如您所见,它依赖于< code>StaticApiImpl。
public class StaticApi {
private static StaticApiImpl impl = new StaticApiImpl();
private StaticApi() {}
public static void setImpl(StaticApiImpl impl) {
StaticApi.impl = impl;
}
public static void doThing() {
impl.doThing();
}
}
这是我自己编码的默认API实现。
public class StaticApiImpl {
public void doThing() {
System.out.println("Do thing the default way.");
}
}
这是第三方可能编写的默认实现的假设扩展版本:
public class MyCustomStaticApiImpl extends StaticApiImpl {
@Override
public void doThing() {
System.out.println("Do thing differently.");
}
}
开发者只需在插件初始化时通过setter方法注入他们的依赖关系:
public void onLoad() throws Exception {
StaticApi.setImpl(new MyCustomStaticApiImpl());
}
我的问题是:这是正确的做法吗?是否有一些设计模式专门用于此类案例,我从未听说过?
您在这里设置的是一个工厂模式,客户可以配置工厂返回哪个实现。这很好,但是有几件事你需要改变。
例如,Foos的资源可能如下所示: 对于酒吧:
我有一个包使用spring依赖注入进行单元测试,使用下面的代码。 我需要在util类中添加一个静态方法,并需要对其进行模拟,以防止现有的单元测试失败。我尝试使用PowerMock,但得到了不同的错误,如下面的错误。
从零开始,没有任何以前的Jersey 1.x知识,我很难理解如何在我的Jersey 2.0项目中设置依赖注入。 我也知道HK2在Jersey 2.0中可用,但我似乎找不到有助于Jersey 2.0集成的文档。 我可以让容器启动并提供我的资源,但是当我将@inject添加到MyService时,框架就会抛出一个异常: 我的starter项目可在github:https://github.com/do
我尝试在我的活动中注入修改,但我得到了空异常 这是AndroidApplication类
好的,到目前为止还好。但是等等,突然A需要额外的输入,比如一个对它的构造至关重要的名为“amount”的整数。现在,我的A构造函数需要如下所示: 突然这个新参数干扰了注射。此外,即使这确实有效,我也无法在从提供者检索新实例时输入“金额”,除非我弄错了。这里有几件事我可以做,我的问题是哪一件是最好的? 我可以通过添加一个方法来重构A,该方法应该在构造函数之后调用。然而,这是很难看的,因为它迫使我推迟
我试图在我的程序中使用accessors(Set/Get)方法,当我试图在main方法中使用Get方法时,我得到了以下错误: 无法从Student类型对非静态方法进行静态引用。 我不确定如何着手解决这个问题。我是Java编程的初学者。 以下是具体的问题: 设置/获取方法: 错误行: 任何建议都将不胜感激* 我的代码的完整图片。