Verwenden von CDI in einem Singleton-Muster
Ich versuche, ein Logger-Objekt in eine Klasse einzufügen, die nach einem Singleton-Ansatz implementiert wird.
Der Code sieht fast so aus:
Logger
Klasse:
public class LoggerFactory {
@Produces
public Logger getLogger(InjectionPoint caller){
return Logger.getLogger(caller.getMember().getDeclaringClass().getName());
}
}
Dann erstelle ich eine Klasse, die Logger benötigt und das Singleton Pattern implementiert:
public class MySingleton{
@Inject
private Logger logger;
private MySingleton instance;
/*
* Private constructor for singleton implementation
*/
private MySingleton(){
logger.info("Creating one and only one instance here!");
}
public MySingleton getInstance(){
if(instance == null) {
instance = new MySingleton();
}
return instance;
}
}
Wenn ich den Code (auf Glassfish 3.1.2.2) ausführe, erhalte ich eine NPE, sobald ich versuche, den Logger zu verwenden. Was mache ich falsch (beans.xml
Datei ist vorhanden)? Ich habe auch versucht mit@Inject
mit einer Setter-Methode für dieLogger
Objekt, aber ohne Glück.