Groovy @singleton无法正常工作

时间:2013-04-30 19:00:47

标签: groovy singleton

下面是我尝试以单例执行的代码

MyResourceBundleSingleton.groovy // groovy class

@Singleton
class MyResourceBundleSingleton {

    public ResourceBundle getResourceBundle () {
        return someService.getMyResourceBundle() // this bundle is returned by calling a separate method
    }

MyResourceBundleSingleton.java // java class

public class MyResourceBundleSingleton {

    private MyResourceBundleSingleton () {
    }

    private static MyResourceBundleSingleton myBundle;

    public static MyResourceBundleSingleton getMyResourceBundleSingletonInstance() {
        if (myBundle == null) {
            synchronized (MyResourceBundleSingleton.class) {
                if (myBundle == null) {
                    myBundle = new MyResourceBundleSingleton();
                }
            }
        }
        return myBundle;
    }

    public ResourceBundle getResourceBundle () {
        return someService.getMyResourceBundle() // this bundle is returned by calling a separate method
    }
}

// 调用groovy

MyResourceBundleSingleton.instance.getResourceBundle()

// 调用java

MyResourceBundleSingleton.getMyResourceBundleSingletonInstance().getResourceBundle()

groovy和java代码都调用相同的方法someService.getMyResourceBundle()。在java代码中只加载.properites文件并为每次调用返回相同的文件,这是单例的正确方法。 然而,在使用@singleton时,如果在.properties文件中有更改,则会返回已更改的文件。我不知道为什么会发生这种情况。我希望它返回相同的.properties文件。 我在groovy代码中遗漏了什么。??

1 个答案:

答案 0 :(得分:1)

您在两个单身人士中每次拨打getResourceBundle()时都会呼叫该服务。假设这会加载一个属性文件,在任何一种情况下都没有理由让它被缓存。如果Java版本返回缓存版本,则还会保存其他内容,而不会在代码中显示。