使用Spring IBatis延迟初始化缓存
我们正在将遗留实现转移到Spring IBatis模型。我一直在用Spring模型以更清晰的方式为这些对象建模 让我们假设我有两个类[它们都是单例的] DAOImpl实现DAOImpl接口 CacheDAOImpl实现daoimpl接口 在CacheDAOImpl中显示对象初始化的代码段使用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
.....
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访问。为了清晰起见,我将编辑这篇文章。