使用依赖注入作为单身人士的替代

Mit*_*tch 6 java singleton dependency-injection guice

我一直都知道Singletons是"糟糕的",但直到现在我已经从C++转向Java,我决定找到解决方法.从一点阅读,我发现工厂或依赖注入可能会完成这项工作,但我想对此进行一些确认.

作为一个例子,我即将编写一个可以存储的AnimationCache单例Map<String, Animation>.不同的类应该能够(基本上)在任何地方访问该类,以便他们可以轻松有效地加载动画.使用DI的等效代码看起来很简单的一个非常简短的例子.

另外,Guice是非网络应用程序DI的良好框架吗?我使用Spring进行Web开发,但我不太确定它是否适用于游戏.

JB *_*zet 5

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;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢构造函数注入,但您也可以使用setter注入或场注入.

但请注意,DI的目的不是为了拥有"轻松的单身人士".它的主要目的是AnimationCacheClient通过能够注入模拟依赖项(这里是一个模拟AnimationCache实例)使代码(在这里)容易单元化.


mor*_*ort 1

使用Spring,DI非常简单。使用 @Autowired 注释,您甚至不需要额外的 xml 来连接事物或 setter 方法。类中需要访问以前是您的单例的成员即可。

这是一个很好的例子:http://www.developer.com/java/other/article.php/3756831/Java-Tip-Simplify-Spring-Apps-with-Autowired.htm