首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

SpringAop在项目中的一些巧妙应用(二)-记录日志

2013-07-29 
SpringAop在项目中的一些巧妙使用(二)--记录日志转载自:http://743389831.iteye.com/blog/1755631在(一)中

SpringAop在项目中的一些巧妙使用(二)--记录日志

转载自:http://743389831.iteye.com/blog/1755631

在(一)中我们对AOP加动态代理有了初步认识,那如何使用这个记录用户进行了哪些操作呢?我们已经知道,AOP加动态代理我们可以知道用户都做了什么调用了哪些方法。我们也知道这些方法是干嘛用的,难道我们要写一个代码if调用了这个类的某某方法,那么这个用户做了什么什么....这个明显太复杂。如果我们对一些方法加注释,并且能获得这个注释,我们是不是就把问题解决了呢?那怎样的注释是我们代码能获得呢?解决了这个问题就差不多把问题解决了。

???? 首先你进行注释,使用注解注释,第一步生成注解。

Java代码??SpringAop在项目中的一些巧妙应用(二)-记录日志
  1. package?net.zoneland.test.common.dal;??
  2. ??
  3. import?net.zoneland.test.common.annotation.Log;??
  4. ??
  5. /**?
  6. ?*??
  7. ?*?@author?wangyong?
  8. ?*?@version?$Id:?TestMapper.java,?v?0.1?2012-12-27?下午9:13:16?wangyong?Exp?$?
  9. ?*/??
  10. public?interface?TestMapper?{??
  11. ??
  12. ????@Log(name?=?"某某的维护或者配置",?comments?=?"更新。。。。")??
  13. ????public?int?updateByPrimaryKey();??
  14. ??
  15. ????@Log(name?=?"某某的维护或者配置",?comments?=?"增加。。。。")??
  16. ????public?void?insert();??
  17. ??
  18. ????@Log(name?=?"某某的维护或者配置",?comments?=?"删除。。。。")??
  19. ????public?int?deleteByPrimaryKey();??
  20. ??
  21. }??

?对方法进行注释:

Java代码??SpringAop在项目中的一些巧妙应用(二)-记录日志
  1. package?net.zoneland.test.common.dal;??
  2. ??
  3. import?net.zoneland.ums.common.util.annotation.Log;??
  4. ??
  5. /**?
  6. ?*??
  7. ?*?@author?wangyong?
  8. ?*?@version?$Id:?TestMapper.java,?v?0.1?2012-12-27?下午9:13:16?wangyong?Exp?$?
  9. ?*/??
  10. public?interface?TestMapper?{??
  11. ??
  12. ????@Log(name?=?"某某的维护或者配置",?comments?=?"更新。。。。")??
  13. ????public?int?updateByPrimaryKey();??
  14. ??
  15. ????@Log(name?=?"某某的维护或者配置",?comments?=?"增加。。。。")??
  16. ????public?void?insert();??
  17. ??
  18. ????@Log(name?=?"某某的维护或者配置",?comments?=?"删除。。。。")??
  19. ????public?int?deleteByPrimaryKey();??
  20. ??
  21. }??

?然后进行监控操作跟上面记录方法执行时间差不多。

?

Java代码??SpringAop在项目中的一些巧妙应用(二)-记录日志
  1. package?net.zoneland.test.common.annotation;??
  2. ??
  3. import?java.lang.reflect.Method;??
  4. ??
  5. import?org.apache.log4j.Logger;??
  6. import?org.springframework.aop.MethodBeforeAdvice;??
  7. ??
  8. /**?
  9. ?*?记录日志的方法,与(一)里的记录方法操作时间是一样的,这里是在方法执行前操作。</br>?实现MethodBeforeAdvice?
  10. ?*??
  11. ?*?@author?wangyong?
  12. ?*?@version?$Id:?LogTraceAdvice.java,?v?0.1?2012-9-6?下午7:57:50?wangyong?Exp?$?
  13. ?*/??
  14. public?class?LogTraceAdvice?implements?MethodBeforeAdvice?{??
  15. ??
  16. ????private?static?final?Logger?logger?=?Logger.getLogger(LogTraceAdvice.class);??
  17. ??
  18. ????/**?
  19. ?????*?@see?org.springframework.aop.MethodBeforeAdvice#before(java.lang.reflect.Method,?
  20. ?????*??????java.lang.Object[],?java.lang.Object)?
  21. ?????*/??
  22. ????public?void?before(Method?method,?Object[]?args,?Object?target)??
  23. ????????????throws?Throwable?{??
  24. ??
  25. ????????//?获得执行的方法名字??
  26. ????????String?methodName?=?method.getName();??
  27. ????????//?检查是否有Log注解,如果没有这个注解就直接返回,有这个注解,进行一下操作。??
  28. ????????if?(!method.isAnnotationPresent(Log.class))?{??
  29. ????????????return;??
  30. ????????}??
  31. ??
  32. ????????if?(methodName.indexOf("update")?>?-1)?{??
  33. ????????????//?获取注解??
  34. ????????????Log?log?=?method.getAnnotation(Log.class);??
  35. ????????????//?执行日志记录??
  36. ????????????if?(log?!=?null)?{??
  37. ????????????????saveAction("更新",?log.name(),?log.comments());??
  38. ????????????}?else?{??
  39. ????????????????saveAction("更新",?"",?"");??
  40. ????????????}??
  41. ??
  42. ????????}?else?if?(methodName.indexOf("insert")?>?-1)?{??
  43. ????????????Log?log?=?method.getAnnotation(Log.class);??
  44. ????????????if?(log?!=?null)?{??
  45. ????????????????saveAction("新增",?log.name(),?log.comments());??
  46. ????????????}?else?{??
  47. ????????????????saveAction("新增",?"",?"");??
  48. ????????????}??
  49. ??
  50. ????????}?else?if?(methodName.indexOf("del")?>?-1)?{??
  51. ????????????Log?log?=?method.getAnnotation(Log.class);??
  52. ????????????if?(log?!=?null)?{??
  53. ????????????????saveAction("删除",?log.name(),?log.comments());??
  54. ????????????}?else?{??
  55. ????????????????saveAction("删除",?"",?"");??
  56. ????????????}??
  57. ??
  58. ????????}??
  59. ??
  60. ????}??
  61. ??
  62. ????private?void?saveAction(String?type,?String?menu,?String?comments)?{??
  63. ????????logger.info("保存到数据库!"?+?type?+?":"?+?menu?+?":"?+?comments);??
  64. ????}??
  65. ??
  66. }??

?配置文件:

?

Java代码??SpringAop在项目中的一些巧妙应用(二)-记录日志
  1. <?xml?version="1.0"?encoding="UTF-8"?>??
  2. <beans?xmlns="http://www.springframework.org/schema/beans"??
  3. ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns:p="http://www.springframework.org/schema/p"??
  4. ????xmlns:context="http://www.springframework.org/schema/context"??
  5. ????xsi:schemaLocation="??
  6. ????????http://www.springframework.org/schema/beans??
  7. ????????http://www.springframework.org/schema/beans/spring-beans-3.0.xsd??
  8. ????????http://www.springframework.org/schema/context??
  9. ????????http://www.springframework.org/schema/context/spring-context-3.0.xsd">??
  10. ??
  11. ????<bean?name="logAdvice"?class="net.zoneland.test.common.annotation.LogTraceAdvice"></bean>??
  12. ??
  13. ????<bean?name="logProxy"??
  14. ????????class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">??
  15. ????????<property?name="interceptorNames">??
  16. ????????????<list>??
  17. ????????????????<value>logAdvice</value>??
  18. ????????????</list>??
  19. ????????</property>??
  20. ????????<property?name="beanNames">??
  21. ????????????<list>??
  22. ????????????????<value>*Mapper</value>??
  23. ????????????</list>??
  24. ????????</property>??
  25. ????</bean>??
  26. ??
  27. </beans>??

?日志记录完成!

热点排行