使用依赖项注入作为单例的替代方案 我一直都知道独生子是“坏”的,但直到现在我已经从C++中移入java,我决定找到一个方法来绕过他们。通过一点阅读,我发现工厂或依赖注入都可能完成这项工作,但我希望得到一些确认
例如,我正要编写一个AnimationCache单例,它将存储一个使用依赖项注入作为单例的替代方案 我一直都知道独生子是“坏”的,但直到现在我已经从C++中移入java,我决定找到一个方法来绕过他们。通过一点阅读,我发现工厂或依赖注入都可能完成这项工作,但我希望得到一些确认,java,dependency-injection,singleton,guice,Java,Dependency Injection,Singleton,Guice,例如,我正要编写一个AnimationCache单例,它将存储一个贴图。不同的类应该能够在任何地方访问这个类(基本上),以便它们可以轻松有效地加载动画。用一个非常简单的例子来说明使用DI时等效代码的样子会很好 此外,Guice是否是非web应用程序DI的良好框架?我曾使用Spring进行web开发,但我不确定它是否适用于游戏。使用Spring,DI非常简单。使用@Autowired注释,您甚至不需要额外的xml来连接内容或setter方法。类中需要访问以前是您的单身者的成员可以 这里有一个很好的
贴图
。不同的类应该能够在任何地方访问这个类(基本上),以便它们可以轻松有效地加载动画。用一个非常简单的例子来说明使用DI时等效代码的样子会很好
此外,Guice是否是非web应用程序DI的良好框架?我曾使用Spring进行web开发,但我不确定它是否适用于游戏。使用Spring,DI非常简单。使用@Autowired注释,您甚至不需要额外的xml来连接内容或setter方法。类中需要访问以前是您的单身者的成员可以
这里有一个很好的例子:Spring和Guice会很好。我个人更喜欢Guice进行纯粹的依赖注入,但Spring提供了更多 代码如下所示:
public class AnimationCacheClient {
private AnimationCache cache;
@Autowired // for Spring, or
@Inject // for Guice (but I think Spring also supports it now)
public AnimationCacheClient(AnimationCache cache) {
this.cache = cache;
}
// ...
}
我个人更喜欢构造函数注入,但也可以使用setter注入或字段注入
但是请注意,DI的目的并不是要有“简单的单例”。它的主要目的是通过能够注入模拟依赖项(此处为模拟
AnimationCache
实例),使代码(此处为AnimationCache
的代码)易于单元可设置。我最近在Singleton上“使用”了它,它可能有多糟糕(或没有),以及如何绕过它。非常值得一读。感谢您提供的代码示例。这看起来很简单。所以我错误地认为依赖注入可以取代单例?我真的在寻找一种更好的方法,让代码能够访问一个类,而这个类应该只有一个。不,你没有错。默认情况下,SpringBean是单例的。默认情况下,guicebean是原型,但可以配置为单例。我只是想指出,DI的主要目标不是让单身变得容易。它的主要目标是使测试变得容易。Spring DI不仅适用于Web应用程序。更新:您可能还需要考虑。自2017-04年起,标准化。专为Java SE和Java EE设计。此问题及其答案可能与未来读者相关: