2010-01-24 3 views
0

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

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

DAOImpl реализует DAOInterface

CacheDAOImpl инвентарь DAOInterface

Код snip погладить, показывающие инициализации объекта в 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 всегда будет доступен не-ленивым bean-компонентом

ответ

0

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

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

+0

@Bozho Спасибо. К нему будет обращаться не ленивый боб. Я отредактирую сообщение для ясности. – Chandra