Ленивая инициализация кеша с помощью 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 отличным от процесса его использования. Т.е., когда он создается, не инициализируйте кеш - только при вызове его методов.