使用Spring IBatis延迟初始化缓存

使用Spring IBatis延迟初始化缓存,spring,caching,lazy-initialization,Spring,Caching,Lazy Initialization,我们正在将遗留实现转移到Spring IBatis模型。我一直在用Spring模型以更清晰的方式为这些对象建模 让我们假设我有两个类[它们都是单例的] DAOImpl实现DAOImpl接口 CacheDAOImpl实现daoimpl接口 在CacheDAOImpl中显示对象初始化的代码段 ..... private static CacheDAOImpl ourInstance = new CacheDAOImpl(); public static CacheDAOImpl getInst

我们正在将遗留实现转移到Spring IBatis模型。我一直在用Spring模型以更清晰的方式为这些对象建模

让我们假设我有两个类[它们都是单例的]

DAOImpl实现DAOImpl接口

CacheDAOImpl实现daoimpl接口

CacheDAOImpl中显示对象初始化的代码段

.....

private static CacheDAOImpl ourInstance = new CacheDAOImpl();

public static CacheDAOImpl  getInstance()
{
   return ourInstance;
}

private CacheDAOImpl()
{
 // intialiazes all caches
}
显示CacheDAOImpl对象用法的DAOImpl代码片段

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

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

在上面的实现中,只有在DAOImpl中调用方法时才会初始化缓存,而在Spring模型的初始化中,我们可以这样做吗?。lazy init在这里可能不起作用,因为对象DAOImpl总是由非lazy bean访问。首先,spring将对象定义为singleton的方法是在
singleton
(默认)bean范围中定义


其次,
lazy init
应该可以工作。只需使daobean的初始化过程与使用它的过程有所不同。也就是说,在构造缓存时,不要初始化缓存-只有在调用缓存的方法时才进行初始化。

@Bozho谢谢。它将始终由非惰性bean访问。为了清晰起见,我将编辑这篇文章。