继续 上一章节[Memcached 入门-介绍-使用-优化
]
http://leiwuluan./blog/1173402
一、
下面主要 实现spring aop 对web 应用数据 进行缓存存取。
说到aop 大家就会想到使用spring 的aop进行切面进行对web Action 的方法进行控制。
下图是实现的流程:

####
这边用到spring的两个类,简单介绍:
1、1
org.springframework.aop.framework.ProxyFactoryBean
spring 这个类可以代理目标类的所有方法
。
- <strong>
- </strong>
-
- <bean id="surroundAdvice" class="com.memCached.service.aop.SurroundAdvice">
-
- <property name="memCachedClient" ref="memCachedClient" />
-
- </bean>
-
-
-
- <bean id="proxyFactory" abstract="true" class="org.springframework.aop.framework.ProxyFactoryBean">
-
- <property name="interceptorNames">
-
- <idref local="surroundAdvice" />
-
- </property>
-
- <property name="proxyTargetClass" value="true" />
-
- </bean>
-
-
-
- <bean id="studentRestService" parent="proxyFactory">
-
- <property name="target" ref="_studentRestService" />
-
- </bean>
-
-
-
- <bean id="_studentRestService" class="com.student.rest.service.impl.StudentServiceImpl">
-
- <property name="studentDao" ref="studentDao" />
-
- </bean>
-
- <bean id="studentDao" class="com.student.dao.impl.StudentDaoImpl" /><strong>
- </strong>
-
-
-
-
- _studentRestService里面的所有方法将会被 surroundAdvice 给拦截。
spring 代理可以看看这位仁兄的:http:///readbook/open/springrmdjt/15705.html
- <strong><span><strong><span style="color: #339966;">surroundAdvice </span>
-
-
-
- </strong>
-
-
-
- </span>
-
-
-
- </strong>
-
-
-
- implements MethodInterceptor 实现这个接口 重写invoke 方法
在这个方法里进行控制 如下,
- @Override
- public Object invoke(MethodInvocation arg0) throws Throwable {
-
- String fname = arg0.getMethod().getName();
- String key = getKey(fname, arg0.getArguments());
- StringBuffer sb = new StringBuffer();
- Object resultObj = null;
-
- if (memCachedClient != null) {
- if(MemcachedConf.CACHE_FLAG==MemcacheFlag.CLOSE_CACHE){
- memCachedClient.delete(key);
- sb.append(",不使用缓存");
- resultObj = arg0.proceed();
- }else{
- resultObj = memCachedClient.get(key);
- if(resultObj==null){
- resultObj = arg0.proceed();
- ResultDto s = (ResultDto)resultObj;
- if("success".equals(s.returncode)){
- sb.append(",数据存入缓存");
- memCachedClient.set(key, s, new Date(1000*60*60));
- }
- }else{
- sb.append(",缓存数据");
- }
- }
- }else{
- resultObj = arg0.proceed();
- }
- return resultObj;
- }
二、
一步一步 开始,从安装memcached 到web 搭建,运行,测试(有缓存与没有缓存的访问时间,测试)
2、1 安装
,以windows下为例吧,linux下也是一样的简单。
http://leiwuluan./blog/1172798
2、2 web 搭建
,数据库
:mysql,服务用
:rest,数据库操作
:Jdbc连接池
下面工程,不多说。
注意:ITeye最多10MB 只好把里面jar去了。
可以到官网下jar 包.
参考:
http://leiwuluan./blog/1173402
下个cxf:官方地址:http://cxf./download.html
2、3 测试结果显示
无缓存处理时间:

---------------------------------------------------------------------------------------------
缓存数据处理时间:

待续...........................