1.定义注解类
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodLog {
String remark() default "";
String operType() default "0";
String user() default "";
//String desc() default "";
}
2.定义aop类
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.cqliving.cloud.online.logs.MethodLog;
import com.cqliving.cloud.online.logs.dao.SysLogDao;
@Component
@Aspect
public class LogService {
@Resource
private SysLogDao sysLogDao;
public LogService() {
System.out.println("================login......");
}
@Pointcut("@annotation(com.cqliving.cloud.online.logs.MethodLog)")
public void methodCachePointcut() {
System.out.println("===========aop切好啦。。。。。。。。");
}
@SuppressWarnings("unused")
@Around("methodCachePointcut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
Calendar ca = Calendar.getInstance();
String operDate = df.format(ca.getTime());
// String ip =
String monthRemark = getMthodRemark(point);
String monthName = point.getSignature().getName();
String packages = point.getThis().getClass().getName();
System.out.println(monthRemark);
if (packages.indexOf("$$EnhancerByCGLIB$$") > -1) { // 如果是CGLIB动态生成的类
try {
packages = packages.substring(0, packages.indexOf("$$"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
String operatingcontent = "";
Object[] method_param = null;
/* Syslog sysLog = new Syslog();
sysLog.setIpAddress(ip);
sysLog.setLoginName(loginName);
sysLog.setName(name);
sysLog.setMethodName("./" + monthName);
sysLog.setMethodRemark(monthRemark);
sysLog.setOperatingcontent(Arrays.toString(method_param));
sysLog.setOperatingSysName("KSFULIFE");*/
// System.out.println("记录操作日志:"+sysLog);
// systemLogDao.insert(sysLog);
return method_param;
}
// 方法运行出现异常时调用
// @AfterThrowing(pointcut = "execution(* com.wssys.controller.*(..))",
// throwing = "ex")
public void afterThrowing(Exception ex) {
System.out.println("afterThrowing");
System.out.println(ex);
}
// 获取方法的中文备注____用于记录用户的操作日志描述
public static String getMthodRemark(ProceedingJoinPoint joinPoint)
throws Exception {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] method = targetClass.getMethods();
String methode = "";
for (Method m : method) {
if (m.getName().equals(methodName)) {
Class[] tmpCs = m.getParameterTypes();
if (tmpCs.length == arguments.length) {
MethodLog methodCache = m.getAnnotation(MethodLog.class);
if (methodCache != null) {
methode = methodCache.remark();
}
break;
}
}
}
return methode;
}
}
3.在controller层定义 加入注解
@RequestMapping(value="/agree/list",method={RequestMethod.GET,RequestMethod.POST})
@MethodLog(remark="查询")
public String agree(HttpServletRequest request,HttpServletResponse resp,ModelMap map,@RequestParam(value="contentValue",required=false) String contentValue,@RequestParam(value="contentType",required=false) String contentType) throws UnsupportedEncodingException{
}
4.在spring-servlet里加入
<!-- 定义aspectj -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- aop -->
<bean id="logService" class="XXXX.LogService"></bean>