aop註解簡單日誌

mport java.lang.reflect.Method; 


import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Component; 


  
@Component 
@Aspect 
public class LogAspectForPaypal { 


    private final static Logger log = LoggerFactory.getLogger(LogAspectForPaypal.class); 


    /** 
     * 添加業務邏輯方法切入點 
     */ 
    @Pointcut("execution(* com.tian.service.**Service.*(..))") 
    public void methodPointcut() { 
    } 


    @Before(value = "methodPointcut()") 
    public void getInputParameters(JoinPoint joinPoint) { 
        // 判斷參數 
        if (joinPoint.getArgs() == null) { 
            return; 
        } 
        // 獲取方法名 
        String methodName = joinPoint.getSignature().getName(); 
        // 獲取操做內容 
        String opContent = optionContent(joinPoint.getArgs(), methodName); 
        if (log.isInfoEnabled()) { 
            log.info(opContent); 
        } 
    } 


    /** 
     * 使用Java反射來獲取被攔截方法的參數值, 將參數值拼接爲操做內容 
     *  
     * @param args 
     * @param mName 
     * @return 
     */ 
    public String optionContent(Object[] args, String mName) { 
        String result = null; 
        if (args == null) { 
            return null; 
        } 
        StringBuilder rs = new StringBuilder(); 
        rs.append("methodName:"); 
        rs.append(mName); 
        String className = null; 
        // 遍歷參數對象 
        for (Object info : args) { 
            // 獲取對象類型 
            className = info.getClass().getName(); 
            className = className.substring(className.lastIndexOf(".") + 1); 
            rs.append(", parameters:{"); 
            // 獲取對象的全部方法 
            Method[] methods = info.getClass().getDeclaredMethods(); 
            // 遍歷方法,判斷get方法 
            for (Method method : methods) { 
                String methodName = method.getName(); 
                // 判斷是否是get方法 
                if (methodName.indexOf("get") == -1) {// 不是get方法 
                    continue;// 不處理 
                } 
                Object rsValue = null; 
                try { 
                    // 調用get方法,獲取返回值 
                    rsValue = method.invoke(info); 
                } catch (Exception e) { 
                    continue; 
                } 
                if (rsValue != null) { 
                    // 將值加入內容中 
                    rs.append("\""); 
                    rs.append(methodName.substring(3)); 
                    rs.append("\":\""); 
                    rs.append(rsValue); 
                    rs.append("\","); 
                } 
            } 
        } 
        result = rs.toString(); 
        return result.substring(0, result.length() - 1) + "}"; 
    } 
}java

相關文章
相關標籤/搜索