下面是我尝试作为单例执行的代码
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 代码中遗漏了什么吗??