public interface CachedLoadService {
Map<String,Object> loadHomeData();
}
public class CachedUtils {
private static Date lastSearchTime=null;
private static Map mapMediaList=null;
static Object lock = new Object();
public static Map getMediaList() {
synchronized (lock) {
CachedLoadService cachedLoadService=(CachedLoadService) SpringContextUtil.getBean("cachedLoadService"); //或者其它业务类
try {
if(lastSearchTime==null) {
mapMediaList=cachedLoadService.loadHomeData();
lastSearchTime=new Date();
} else {
if(mapMediaList==null) {
mapMediaList=cachedLoadService.loadHomeData();
lastSearchTime=new Date();
} else {
mapMediaList=cachedLoadService.loadHomeData();
lastSearchTime=new Date();
}
}
return mapMediaList;
} catch (Exception e) {
return mapMediaList;
}
}
}
cachedLoadService.loadHomeData() 就是一个 final static Map ,还有必要去特意弄一个接口吗?这种做法的作用是什么?
1.从内存方面来讲,spring通过动态代理,可以做到,需要什么的时候,就加载进来什么。而不像静态方法一样,在程序编译的时候就加载进来。
2.通过spring的IOC可以控制在程序整个生命周期,是需要始终维护一个对象(如单例模式),还是使用beanFactory一样分别产生不同的Java bean。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。