原贴地址:http://moon-walker.iteye.com/blog/2381532
LogXmlAop.java(统一的日志aop)
package com.utils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* 统一日志aop
*/
@Component //标记为一个
public class LogXmlAop {
private static final Logger log = LoggerFactory.getLogger(LogXmlAop.class);
public LogXmlAop() {
System.out.println("*************************logstart************************");
}
public void beforeLog(JoinPoint jp){
System.out.println("进入before");
log.info("sss");
log.info(jp.getSignature().getDeclaringTypeName()+"类的"+jp.getSignature().getName()+ "方法Before日志");
}
public Object aroundLog(ProceedingJoinPoint jp) {
Object result=null;
try {
log.info(jp.getSignature().getDeclaringTypeName()+"类的"+jp.getSignature().getName()+"方法Around通知开始");
result=jp.proceed();
log.info(jp.getSignature().getDeclaringTypeName() + "方法Around通知结束");
}catch (Throwable throwable) {
Object[] args = jp.getArgs();
System.out.println("参数列表值为:");
for (Object one: args){
log.error(one.toString());
}
log.error(jp.getSignature().getDeclaringTypeName() + "类的" + jp.getSignature().getName() + "调用异常", throwable);
}
return result;
}
public void after(JoinPoint jp){
log.info(jp.getSignature().getDeclaringTypeName()+"类的"+jp.getSignature().getName()+ "方法after日志");
}
public void afterRet(JoinPoint jp){
log.info(jp.getSignature().getDeclaringTypeName()+"类的"+jp.getSignature().getName()+ "方法AfterReturning日志");
}
public void afterError(JoinPoint jp){
log.info(jp.getSignature().getDeclaringTypeName()+"类的"+jp.getSignature().getName()+ "方法AfterThrowing日志");
}
}
applicationContext-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
<context:component-scan base-package="com.utils" />
<aop:config>
<aop:aspect ref="logXmlAop">
<aop:pointcut id="log" expression="execution(* com.service.*.*(..))"/>
<aop:before pointcut-ref="log" method="beforeLog"/>
<aop:around pointcut-ref="log" method="aroundLog"/>
<aop:after pointcut-ref="log" method="after" />
<aop:after-returning pointcut-ref="log" method="afterRet" />
<aop:after-throwing pointcut-ref="log" method="afterError" />
</aop:aspect>
</aop:config>
<aop:aspectj-autoproxy expose-proxy="true"></aop:aspectj-autoproxy>
</beans>