由于我们的菜单,按钮等这些资源,系统一旦确定几乎是确定不变的。在这样的情况下,我们完全可以把这些资源放入到缓存中,提高程序的效率。
我们这里采用的是,当Tomcat一启动,就会把用户的授权资源和系统所有的资源放入到application缓存中。
核心代码如下:
/**
* 加载菜放入到application全局缓存中,当Tomcat启动时就加载上
*注意:在web.xml中配置监听器,此时tomcat通过反射创建监听器,而用的并不是spring中的。
* @author V-HUXJ
*
*/
publicclass InitListener implements ServletContextListener {
//获取容器与先关的service对象
publicvoid contextInitialized(ServletContextEvent sc) {
//获取privilegeService对象
ApplicationContextac=WebApplicationContextUtils.getWebApplicationContext(sc.getServletContext());
PrivilegeServiceprivilegeService=(PrivilegeService)ac.getBean("privilegeServiceImpl");
//1.准备数据:topPrivileges
List<Privilege>topPrivileges=privilegeService.findTopPrivilege();
//放入到application
sc.getServletContext().setAttribute("topPrivileges",topPrivileges);
System.out.println("------------->topPrivileges已经准备数据完毕--------------------->");
//2.准allPriliveges备数据
Collection<String>allPrilivegeUrls=privilegeService.getAllPrivilegeUrls();
sc.getServletContext().setAttribute("allPrivilegeUrls",allPrilivegeUrls);
System.out.println("------------->allPriliveges已经准备数据完毕--------------------->");
}
publicvoid contextDestroyed(ServletContextEvent se) {
}
}
Web.xml:
<!--
用于做初始化工作的监听器,一定要配置到Spring的ContextLoaderListener之后,因为要用到Spring的容器对象
-->
<listener>
<listener-class>cn.itcast.oa.util.InitListener</listener-class>
</listener>
当Tomcat启动,就会缓存到我们的资源。
总结:
当那些几乎不变的东西,不妨我们放入到我们的缓存,兴许它真的可以将我们的性能提升不少。