使用Spring IBatis延迟缓存初始化

时间:2010-01-24 08:08:14

标签: spring caching lazy-initialization

我们正在将我们的遗留实现转移到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总是被非懒惰的bean访问

1 个答案:

答案 0 :(得分:0)

首先,spring将对象定义为单例的方法是在singleton(默认)bean范围内定义。

其次,lazy-init应该有效。只是让DAO bean的初始化过程与使用它的过程不同。即在构造它时,不要初始化缓存 - 只有在调用它的方法时才会。