下面是我尝试以单例执行的代码
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代码中遗漏了什么。??
答案 0 :(得分:1)
您在两个单身人士中每次拨打getResourceBundle()
时都会呼叫该服务。假设这会加载一个属性文件,在任何一种情况下都没有理由让它被缓存。如果Java版本返回缓存版本,则还会保存其他内容,而不会在代码中显示。