Ich verwende einen statischen Code-Block, um einige Controller in einer Registrierung zu initialisieren, die ich habe. Meine Frage ist daher, kann ich garantieren, dass dieser statische Codeblock nur einmal beim ersten Laden der Klasse aufgerufen wird? Ich verstehe, dass ich nicht garantieren kann, wenn dieser Codeblock aufgerufen wird, ich rate es, wenn der Classloader ihn zuerst lädt. Ich weiß, dass ich die Klasse im statischen Codeblock synchronisieren konnte, aber ich vermute, dass das tatsächlich passiert, was auch immer passiert?Sind statische Java-Initialisierer threadsicher?
Einfaches Codebeispiel wäre;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
oder sollte ich dies tun;
Ich mag dieses Design nicht, da es nicht testbar ist. Sehen Sie sich Dependency Injection an. – dfa