天天看點

SpringAop在項目中的一些巧妙使用(二)--記錄日志

轉載自:http://743389831.iteye.com/blog/1755631

在(一)中我們對AOP加動态代理有了初步認識,那如何使用這個記錄使用者進行了哪些操作呢?我們已經知道,AOP加動态代理我們可以知道使用者都做了什麼調用了哪些方法。我們也知道這些方法是幹嘛用的,難道我們要寫一個代碼if調用了這個類的某某方法,那麼這個使用者做了什麼什麼....這個明顯太複雜。如果我們對一些方法加注釋,并且能獲得這個注釋,我們是不是就把問題解決了呢?那怎樣的注釋是我們代碼能獲得呢?解決了這個問題就差不多把問題解決了。

     首先你進行注釋,使用注解注釋,第一步生成注解。

Java代碼  

SpringAop在項目中的一些巧妙使用(二)--記錄日志
  1. package net.zoneland.test.common.dal;  
  2. import net.zoneland.test.common.annotation.Log;  
  3. public interface TestMapper {  
  4.     @Log(name = "某某的維護或者配置", comments = "更新。。。。")  
  5.     public int updateByPrimaryKey();  
  6.     @Log(name = "某某的維護或者配置", comments = "增加。。。。")  
  7.     public void insert();  
  8.     @Log(name = "某某的維護或者配置", comments = "删除。。。。")  
  9.     public int deleteByPrimaryKey();  
  10. }  

 對方法進行注釋:

Java代碼  

SpringAop在項目中的一些巧妙使用(二)--記錄日志
  1. package net.zoneland.test.common.dal;  
  2. import net.zoneland.ums.common.util.annotation.Log;  
  3. public interface TestMapper {  
  4.     @Log(name = "某某的維護或者配置", comments = "更新。。。。")  
  5.     public int updateByPrimaryKey();  
  6.     @Log(name = "某某的維護或者配置", comments = "增加。。。。")  
  7.     public void insert();  
  8.     @Log(name = "某某的維護或者配置", comments = "删除。。。。")  
  9.     public int deleteByPrimaryKey();  
  10. }  

 然後進行監控操作跟上面記錄方法執行時間差不多。

Java代碼  

SpringAop在項目中的一些巧妙使用(二)--記錄日志
  1. package net.zoneland.test.common.annotation;  
  2. import java.lang.reflect.Method;  
  3. import org.apache.log4j.Logger;  
  4. import org.springframework.aop.MethodBeforeAdvice;  
  5. public class LogTraceAdvice implements MethodBeforeAdvice {  
  6.     private static final Logger logger = Logger.getLogger(LogTraceAdvice.class);  
  7.     public void before(Method method, Object[] args, Object target)  
  8.             throws Throwable {  
  9.         // 獲得執行的方法名字  
  10.         String methodName = method.getName();  
  11.         // 檢查是否有Log注解,如果沒有這個注解就直接傳回,有這個注解,進行一下操作。  
  12.         if (!method.isAnnotationPresent(Log.class)) {  
  13.             return;  
  14.         }  
  15.         if (methodName.indexOf("update") > -1) {  
  16.             // 擷取注解  
  17.             Log log = method.getAnnotation(Log.class);  
  18.             // 執行日志記錄  
  19.             if (log != null) {  
  20.                 saveAction("更新", log.name(), log.comments());  
  21.             } else {  
  22.                 saveAction("更新", "", "");  
  23.             }  
  24.         } else if (methodName.indexOf("insert") > -1) {  
  25.             Log log = method.getAnnotation(Log.class);  
  26.             if (log != null) {  
  27.                 saveAction("新增", log.name(), log.comments());  
  28.             } else {  
  29.                 saveAction("新增", "", "");  
  30.             }  
  31.         } else if (methodName.indexOf("del") > -1) {  
  32.             Log log = method.getAnnotation(Log.class);  
  33.             if (log != null) {  
  34.                 saveAction("删除", log.name(), log.comments());  
  35.             } else {  
  36.                 saveAction("删除", "", "");  
  37.             }  
  38.         }  
  39.     }  
  40.     private void saveAction(String type, String menu, String comments) {  
  41.         logger.info("儲存到資料庫!" + type + ":" + menu + ":" + comments);  
  42.     }  
  43. }  

 配置檔案:

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.     <bean name="logAdvice" class="net.zoneland.test.common.annotation.LogTraceAdvice"></bean>  
  11.     <bean name="logProxy"  
  12.         class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  13.         <property name="interceptorNames">  
  14.             <list>  
  15.                 <value>logAdvice</value>  
  16.             </list>  
  17.         </property>  
  18.         <property name="beanNames">  
  19.             <list>  
  20.                 <value>*Mapper</value>  
  21.             </list>  
  22.         </property>  
  23.     </bean>  
  24. </beans>  

 日志記錄完成!