Ленивая инициализация кеша с помощью Spring IBatis

Мы переносим нашу унаследованную реализацию на модель Spring IBatis. Я немного застрял в моделировании этих объектов более чистым способом с использованием модели Spring

Допустим, у меня есть два класса [Оба они синглтон ]

DAOImpl реализует DAOInterface

CacheDAOImpl реализует DAOInterface

Фрагмент кода, показывающий инициализацию объекта в CacheDAOImpl

.....

private static CacheDAOImpl ourInstance = new CacheDAOImpl();

public static CacheDAOImpl  getInstance()
{
   return ourInstance;
}

private CacheDAOImpl()
{
 // intialiazes all caches
}

Фрагмент кода из DAOImpl, показывающий использование объекта CacheDAOImpl

private DAO getCacheDAO()
{
   return CacheDAOImpl.getInstance();
}

@Override
public SomeObject lookUpId()
{
  return getCacheDAO().lookUpId();
}

В приведенной выше реализации кэш инициализируется только тогда, когда метод вызывается в DAOImpl, тогда как с помощью модели инициализации Spring мы можем это сделать? lazy-init может не работать здесь, так как объект DAOImpl всегда будет доступен не ленивому компоненту

1 ответ

Во-первых, весенний способ определения объекта как синглтона состоит в том, чтобы определить в singleton (по умолчанию) область действия bean.

Во-вторых, lazy-init должно сработать. Просто сделайте процесс инициализации компонента DAO отличным от процесса его использования. Т.е., когда он создается, не инициализируйте кеш - только при вызове его методов.

Другие вопросы по тегам