invoke方法中,首先根据key查询缓存(key=className + methodName + arguments) ,缓存中存在则返回,否之调用invocation.proceed()返回结果. 在Spring配置文件中定义拦截器 <bean id="methodCacheInterceptor" class="org.taha.interceptor.MethodCacheInterceptor"> &n ...
我们都知道Hibernate可以用ehcache来作为Second Level Cache.主要是针对POJO的缓存,而且缓存的读取 在Hibernate中是写死.实际运用中感觉很不灵活.今天看到一篇介绍利用Spring Interceptor 来缓存指定 方法结果的例子,感觉很不错,充分体会到AOP的强大力量 :) 首先配置ehcache.xml  <ehcache>   ...
关于spring事务管理以及异常处理的帖子,本论坛争论颇多,各有各的测试代码,也各有各的测试结果, 不知道是spring版本的不同还是各测试的例子的不同而导致测试结果出现差异. 本人也很想弄清楚spring是如何对Service进行事务管理的,并且还去看了一下spring框架关于事务管理几个相关类的源码,可惜由于本人功力有限,只看懂了皮毛. 既然源代码看不懂,那么只有运用例子进行测试,虽然笨了点,不过管是白猫还是黑猫,能捉老鼠就是好猫.:) 为引起不必要的争论,本帖子只针对本案例的测试结果进行小结,并保证此测试代码在本人的运行环境绝对正确. 开发环境: OS:window ...
为了在Struts中加载Spring context,需要在struts-config.xml文件中加入如下部分: <struts-config>   <plug-in          className="org.springframework.web.struts.ContextLoaderPlugIn">      <set-property property="contextConfigL ...
Web层实现   1、Web层的构件和交互流程   Web层包括主要3个功能:   ·上传文件。   ·列出所有已经上传的文件列表,以供点击下载。   ·下载文件。   Web层实现构件包括与2个JSP页面,1个ActionForm及一个Action:   ·file-upload.jsp:上传文件的页面。   ·file-list.jsp:已经上传文件的列表页面。   ·FileActionForm:file-upload.jsp页面表单对应的Action ...
业务层   1、业务层接口   "面向接口而非面向类编程"是Spring不遗余力所推荐的编程原则,这条原则也已经为大部开发者所接受;此外,JDK的动态代理只对接口有效,否则必须使用CGLIB生成目标类的子类。我们依从于Spring的倡导为业务类定义一个接口:   代码 7 业务层操作接口 1. public interface FileService 2. { 3. void save(FileActionForm fileForm);// ...
数据持久层   1、领域对象及映射文件   您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为:   代码 1 领域对象Tfile 1. package sshfile.model; 2. public class Tfile 3.{ 4. p ...
下载本文源代码   引言   文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload、Apache的FileUpload。但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了。   本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:   ·Strut ...
今天有一个朋友问了我一个问题,他使用的是Hibernate/Spring/Struts架构,配置使用Spring的OpenSessionInView Filter,但是发现不生效,lazy的集合属性在页面访问的时候仍然报session已经关闭的错误。我和他一起检查了所有的配置和相关的代码,但是没有发现任何问题。经过调试发现,应用程序使用的Session和OpenSessionInView Filter打开的Session不是同一个,所以OpenSessionInView模式没有生效,但是为什么他们不使用同一个Session呢? 检查了一遍Spring的相关源代码,发现了问题的根源: ...
在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception;    Open Session In View提供了一种简便的方法,较好地解决了lazy loading问题.     它有两种配置方式OpenSessionInViewInte ...
要分页就必须要有取数据库的起始位置和取多少记录,还有要有总记录 用spring来结合hibernate实现分页, 首先创建一个PageBean.java: package com.binghe.spring; public class PageBean {  private int count = 0; // 记录总数  private int pageSize = 20; // 每页显示记录数  private int pageCount = 0; // 总页数  private int page = 1; // 当前页数   ...