Creating a singleton class in Groovy is simple. We only have to use the @Singleton transformation annotation and a complete singleton class is generated for us.
package com.mrhaki.blog
// Old style singleton class.
public class StringUtil {
private static final StringUtil instance = new StringUtil();
private StringUtil() {
}
public static StringUtil getInstance() {
return instance;
}
int count(text) {
text.size()
}
}
assert 6 == StringUtil.instance.count('mrhaki')
// Use @Singleton to create a valid singleton class.
// We can also use @Singleton(lazy=true) for a lazy loading
// singleton class.
@Singleton
class Util {
int count(text) {
text.size()
}
}
assert 6 == Util.instance.count("mrhaki")
try {
new Util()
} catch (e) {
assert e instanceof RuntimeException
assert "Can't instantiate singleton com.mrhaki.blog.Util. Use com.mrhaki.blog.Util.instance" == e.message
}