-1

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

MyResourceBundleSingleton.groovy // groovy 类

@Singleton
class MyResourceBundleSingleton {

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

MyResourceBundleSingleton.java // java 类

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 文件并且每次调用都返回相同的文件,这是单例的正确方式。而在 groovy 中,当 .properties 文件发生更改时,使用 @singleton 会返回更改的文件。我不知道为什么会这样。我期待它返回相同的 .properties 文件。我在 groovy 代码中遗漏了什么吗??

4

1 回答 1

1

getResourceBundle()在两个单例中的每次调用时都调用该服务。假设这会加载一个属性文件,那么在这两种情况下都没有理由对其进行缓存。如果 Java 版本正在返回缓存版本,则有其他内容未显示在您的代码中。

于 2013-04-30T19:17:26.350 回答