シングルトンクラスの実装にオブジェクトを注入しようとしています。このようなもの
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()を呼び出すと、nullのMyObjectが取得されます。myobjectとMyObjectWrapperのBeanエントリがあります。
getBeanの使用はベストプラクティスではないことは知っていますが、この特定の例では許容できますか?欠点は何ですか?ここにない場合は、Mainメソッドで同様のgetBean呼び出しを実行します。
メインメソッドでgetBeanを実行できます(そこでアプリケーションコンテキストにアクセスしています)が、このWrapperクラスがこのシングルトンの作成を担当するようにしたかっただけです。MyObjectを必要とするオブジェクトは、MyObjectWrapper.getImpl()を呼び出すだけで、シングルトンオブジェクトを取得できます。
同じことについてのフィードバックをいただければ幸いです。