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

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

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

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

Java代码   收藏代码
  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代码   收藏代码
  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代码   收藏代码
  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.  * 记录日志的方法,与(一)里的记录方法操作时间是一样的,这里是在方法执行前操作。
     实现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代码   收藏代码
  1. "1.0" encoding="UTF-8"?>  
  2. "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.     "logAdvice" class="net.zoneland.test.common.annotation.LogTraceAdvice">  
  12.   
  13.     "logProxy"  
  14.         class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  15.         "interceptorNames">  
  16.               
  17.                 logAdvice  
  18.               
  19.           
  20.         "beanNames">  
  21.               
  22.                 *Mapper  
  23.               
  24.           
  25.       
  26.   
  27.   

 日志记录完成!

你可能感兴趣的:(Java初学者,java,spring,aop)