Я пытаюсь внедрить объект в одноэлементную реализацию класса. Что-то вроде этогоИспользование ApplicationContextAware в Singleton class
public class MyObjectWrapper implements ApplicationContextAware {
public static MyObject myObject;
private ApplicationContext ctxt;
private MyObjectWrapper() {}
public static synchronized MyObject getImpl() {
if (myObject!=null)
return myObject;
MyObjectWrapper myObjectWrapper=new MyObjectWrapper();
this.myObject = (MyObject) myObjectWrapper.getCtxt().getBean("myobject");
return myObject;
}
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
logger.debug("setApplicationContext - " + arg0);
this.ctxt = arg0;
}
public ApplicationContext getCtxt() {
return ctxt;
}
public void setCtxt(ApplicationContext ctxt) {
this.ctxt = ctxt;
}
}
он не работает, то есть, когда я называю MyObjectWrapper.getImpl() я получаю нулевой MyObject. У меня есть записи bean для myobject и MyObjectWrapper.
Я знаю, что использование getBean - это не лучшая практика, но в этом конкретном примере это приемлемо? Что такое недостаток? Если не здесь, я буду делать аналогичный вызов getBean в моем основном методе.
я могу сделать getBean в моем основном методе (я имею доступ к контексту приложения там), но я просто хотел, чтобы этот класс Wrapper, чтобы нести ответственность за создание этого синглтон. Объекты, которые нуждаются в MyObject, могут просто вызвать MyObjectWrapper.getImpl(), и они получают объект singleton.
Любая обратная связь на том же будет оценена по достоинству.