LegacyなSingletonの取り込み

既存のコードで getInstance などのメソッドを呼んでSingleton を取得するタイプのクラスで、それをSpringのBeanとして管理下に置きたい場合は次のようにすることで実現できた。

これでLegacyなSingletonも他のBeanにDIすることが出来るようになる。

package tutorial;
public class LegacySingleton {
  static private LegacySingleton instance = new LegacySingleton();
  private LegacySingleton() {
  }
  static public LegacySingleton getInstance() {
    return instance;
  }
    : 何か有益なコード
}

こんな Singleton な既存のクラスが有った場合

<bean name="legacy" class="tutorial.LegacySingleton" factory-method="getInstance" scope="singleton" />

とすると、

public class Foo {
  @Resource
  LegacySingleton legacy;
     :
}

こんな風にDIしてもらえる。