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

时间:2011-08-22 08:58:43

标签: java dependency-injection singleton guice

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

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

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

3 个答案:

答案 0 :(得分: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;
    }

    // ...
}

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

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

答案 1 :(得分:1)

使用Spring,DI非常简单。使用@Autowired注释,您甚至不需要额外的xml来连接或使用setter方法。类中的成员需要访问之前已经成为单例的成员。

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

答案 2 :(得分:1)

我最近在Singleton上“借用了”这个thread以及它可能有多糟糕(或没有)以及你可以做些什么来绕过它。非常值得一读。