发表于: 2017-10-19 23:24:46
2 751
今日完成:
因为要使用到aop,踩了至少3个以上的雷点
首先关于对象中存在静态方法,无法被代理的原因.
①因为aop存在两种代理方式,动态代理的条件为代理方法至少实现一个接口,接口是不允许有静态方法的,所以更不用说接口的实现类里有静态方法了
②除去动态代理,那么aop就是采用的cglib代理,而cglib代理生成的代理类继承自被代理类/目标类,请求时,执行自己织入的增强,然后再执行目标方法,因而使用继承方式创建代理类不能代理任何final方法和类,以及静态方法
OK那么第二个方面关于aop的环绕通知
如果代理的方法存在返回值,那么一定要写成
如果直接调用,返回值为空值.
这里为了统计访问db和controller的时间,增加切面并配置
这里要注意的aop的注解开启,和扫描注入得放在spring-mvc配置文件中,否则无法切入
编写一键上传部署脚本
#!/bin/sh
cd /usr/resin/webapps
rm -r mydemo
rm -d mydemo
rm mydemo.war
rz
cd ../bin
./resin.sh restart
这里写的就比较简单,因为上传时一直用的是mydemo名称的Jar包,进入webapps目录后,为了防止有空的mydemo文件夹,在递归删除后再进行空文件夹删除,再删除war包,之后进行上传,重新启动resin服务器.
再看上传的Log日志文件记录
测试成功,提交task3
来到task4
拿到页面后先变为jsp页面,但是访问时css样式及图片全部加载失败,这里要注意在spring-mvc配置文件中开启一下标签,因为我们springmvc是拦截所有资源
这里静态资源也被拦截了,所以要启用默认servlet防止mvc拦截静态资源
<!--启用默认servleet防止mvc拦截静态资源!-->
<mvc:default-servlet-handler/>
将文件引入web项目中,因为这里担心引用的css和图片路径的问题就没有对其进行抽取整理,将html后缀改为jsp,后进行测试
页面引入和相互之间的跳转已经没问题.今天就先到这了
明日计划:学习tiles ,因为框架写好已经把项目套上去了,争取完成task4
问题:思考题,aop中动态代理得实现最少一个接口,静态方法不能存在于接口,而cglib不代理静态方法,想想怎么用aop实现静态方法的代理
收获:aop底层了解了不少,手写了动态代理及cglib代理的方式.
cglib代理
动态代理
评论