spring mvc 小记(三):关于AOP
来源:互联网 发布:淘宝上的军品是配发吗 编辑:程序博客网 时间:2024/06/05 09:27
使用spring mvc已有2年之久,却还是停留在使用阶段,感觉这么下去不是办法,所以还是想往深处一探究竟。
我们已经知道,Spring核心思想就是IOC和AOP,那这其中的AOP到底是啥?
从概念上讲,aop即面向切面编程,但是aop并不是spring独有的,只是spring把它用的比较到位而已。我们也可以在框架中自定义一个切面,作用是计算某个请求所耗费的时间,看看所谓的面向切面编程是什么样子的。前提是:spring mvc框架已经存在。
用两种方式实现:
1、注解式
<span style="font-size:18px;"><!-- 通过在你的Spring的配置中引入下列元素来启用Spring对@AspectJ的支持 --><aop:aspectj-autoproxy/></span>配置文件中开启切面注解,然后写一个普通类
<span style="font-size:18px;">@Aspect@Componentpublic class TimeAspect1 { private static Log logger = LogFactory.getLog(TimeAspect1.class); // service层的统计耗时切面,类型必须为final String类型的,注解里要使用的变量只能是静态常量类型的 public static final String POINT = "execution(* com.jk.dao.*.*(..))"; /** * 在切入点之前执行 */ @Before(POINT) public void doBefore() { logger.info("==========================befor================================"); } /** * 统计方法执行耗时Around环绕通知 * @param joinPoint * @return */ @Around(POINT) public Object timeAround(ProceedingJoinPoint joinPoint) { // 定义返回对象、得到方法需要的参数 Object obj = null; long startTime = System.currentTimeMillis(); try { obj = joinPoint.proceed(); // 获取执行的方法名 long endTime = System.currentTimeMillis(); logger.info("-----方法执行耗时:" + (endTime-startTime) + " ms"); } catch (Throwable e) { e.printStackTrace(); } return obj; } /** * 在切入点之后执行 */ @After(POINT) public void doAfter() { logger.info("==========================after================================"); }}</span>在类上加一个@Aspect注解,该类被扫描时就会被当作一个切面,切面类中定义了3个方法,分别注解为@Befor、@Around、@After,在切入点之前、环绕、之后后执行,访问后可以看到相应的日志信息,并计算出了切点执行所耗费的时间。这里有一个要注意的地方,刚刚折腾了一下:这种配置下,controller貌似不能被当作切点,可能还需要其他特殊配置?
2、配置式
<span style="font-size:18px;"><!--自定义切面 开始--><bean id="TimeAspect2" class="com.jk.aspect.TimeAspect2"></bean><aop:config><aop:pointcut id="pc1" expression="execution(* com.jk.dao.*.*(..))"/><aop:aspect ref="TimeAspect2"><aop:before method="befor" pointcut-ref="pc1"/><aop:around method="around" pointcut-ref="pc1"/><aop:after method="after" pointcut-ref="pc1"/></aop:aspect></aop:config><!--自定义切面 结束--></span>在spring配置文件中加入上面的配置,切面所在的类和切点所在的包要注意配置准确,一一对应,然后就是编写切面类
<span style="font-size:18px;">public class TimeAspect2 { private static final Log logger = LogFactory.getLog(TimeAspect2.class); public void befor(){ logger.info("=====================befor============"); } public Object around(ProceedingJoinPoint joinPoint){ Object object = null; try { long startTime = System.currentTimeMillis(); object = joinPoint.proceed(); Object [] args = joinPoint.getArgs(); for(Object o :args){ System.out.println("==="+o); } long endTime = System.currentTimeMillis(); logger.info("====本次花费:"+(endTime-startTime)+"ms"); } catch (Throwable throwable) { throwable.printStackTrace(); } return object; } public void after(){ logger.info("=======================after============="); }}</span>两种切面配置完毕!
到此对于aop,我能想到的应用的地方就是spring的事务管理,还有例子中的统计某个类执行的时间,也算是对aop有了一点点了解,代码可能不是很完善,如果有大神能指点一二,不胜感激。
0 0
- spring mvc 小记(三):关于AOP
- spring mvc 小记(七):关于spring事务管理
- spring mvc 小记(六):关于MySql优化
- spring mvc 小记(二):关于log4j的配置
- Spring MVC 配置 AOP
- Spring MVC AOP编程
- Spring mvc aop 无效
- Spring in Anction:Spring AOP 小记
- Spring之三 AOP
- (三)Spring AOP
- Spring框架 AOP(三)
- Spring(三) AOP
- Spring(三)AOP
- 2012年终总结spring mvc-----AOP
- spring mvc中配置aop
- Spring(三、Spring AOP)
- 关于spring AOP
- 关于面试Spring aop
- spring profile 多环境配置管理
- 建立一个包含min函数的栈
- 【LightOJ 1038】Race to 1 Again(概率DP求期望)
- 链表不在水题之有序表归并
- 网易2017校园招聘笔试题 数字翻转
- spring mvc 小记(三):关于AOP
- 51nod 1212 无向图最小生成树(prim,kruskal模板)
- ORA-00119和ORA-00132错误
- Spring 核心之IOC
- Android中Gson解析和生成JSON字符串讲解,GsonFormat一键生成对应的数据对象
- Android Studio设置行宽、格式化断行
- 【NOIP2016提高A组模拟9.9】爬山
- 使用phonegap创建联系人
- 第十一章:持有对象《thinking in Java》学习笔记