aop注釈方式はグローバルログ管理方法を実現する。


1:ログエンティティクラス

public class SysLog {
 /** */
 private Integer id;
 /**     */
 private String description;
 /**      */
 private String method;
 /**      0:    ;1:    */
 private Integer logType;
 /**       ip  */
 private String requestIp;
 /**     */
 private String exceptionCode;
 /**       */
 private String exceptionDetail;
 /**     */
 private String params;
 /**    */
 private String createBy;
 /**     */
 private String createDate;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getDescription() {
  return description;
 }
 public void setDescription(String description) {
  this.description = description;
 }
 public String getMethod() {
  return method;
 }
 public void setMethod(String method) {
  this.method = method;
 }
 public Integer getLogType() {
  return logType;
 }
 public void setLogType(Integer logType) {
  this.logType = logType;
 }
 public String getRequestIp() {
  return requestIp;
 }
 public void setRequestIp(String requestIp) {
  this.requestIp = requestIp;
 }
 public String getExceptionCode() {
  return exceptionCode;
 }
 public void setExceptionCode(String exceptionCode) {
  this.exceptionCode = exceptionCode;
 }
 public String getExceptionDetail() {
  return exceptionDetail;
 }
 public void setExceptionDetail(String exceptionDetail) {
  this.exceptionDetail = exceptionDetail;
 }
 public String getParams() {
  return params;
 }
 public void setParams(String params) {
  this.params = params;
 }
 public String getCreateBy() {
  return createBy;
 }
 public void setCreateBy(String createBy) {
  this.createBy = createBy;
 }
 public String getCreateDate() {
  return createDate;
 }
 public void setCreateDate(String createDate) {
  this.createDate = createDate;
 }
}
2:mavenに必要なjar

<dependency> 
   <groupId>org.aspectj</groupId> 
   <artifactId>aspectjrt</artifactId> 
   <version>1.7.4</version> 
  </dependency> 
 <dependency> 
   <groupId>org.aspectj</groupId> 
   <artifactId>aspectjweaver</artifactId> 
   <version>1.7.4</version> 
 </dependency> 
<dependency> 
   <groupId>cglib</groupId> 
   <artifactId>cglib</artifactId> 
   <version>2.1_3</version> 
 </dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>4.2.5.RELEASE</version>
</dependency> 
ここで要求される項目はjdk 1.7です。
3:springServlet-mvc.xml

<!--proxy-target-class="true"    cglib      false spring     --> 
<aop:aspectj-autoproxy proxy-target-class="true"/> 
加えてproxy-targt class="true"はcontrollerの中をブロックするための方法です。
4:うどんを定義します。ここでは主に前置通知と異常通知を書きます。
以下、ユーザー定義のコメントを開始します。

import java.lang.annotation.*;
@Target({ElementType.PARAMETER, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface Log {
	/**           :add   **/ 
	 public String operationType() default ""; 
	 /**           :     **/ 
	 public String operationName() default "";
}
そうめん類

import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
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;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.gtcity.user.model.SysLog;
import com.gtcity.user.model.SysUser;
import com.gtcity.user.service.SysLogService;
/**
 * @author panliang
 * @version     :2017-3-31 
 * @desc     
 *
 */
@Aspect
@Component
public class SystemLogAspect {
	//  Service           
	@Resource 
	private SysLogService systemLogService;
	private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect. class); 
	
	//Controller    
	//   *          
	//   *      
	//   *       
	//    ..       。
	 @Pointcut("execution (* com.gtcity.web.controller..*.*(..))") 
	 public void controllerAspect() { 
	 } 
	 
	 /**
	 * 
	 * @author: panliang
	 * @time:2017-3-31   2:22:16
	 * @param joinPoint   
	 * @describtion:         Controller         
	 */
	 @Before("controllerAspect()")
	 public void doBefore(JoinPoint joinPoint) {
		/* System.out.println("==========  controller    ===============");
		 if(logger.isInfoEnabled()){
			 logger.info("before " + joinPoint);
		 }*/
		 
		 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 
   HttpSession session = request.getSession(); 
   //  session     
   SysUser user = (SysUser) session.getAttribute("user"); 
   if(user==null){
  	 user=new SysUser();
  	 user.setUserName("     ");
   }
   //   IP 
   String ip = request.getRemoteAddr();
   try { 
    
    String targetName = joinPoint.getTarget().getClass().getName(); 
    String methodName = joinPoint.getSignature().getName(); 
    Object[] arguments = joinPoint.getArgs(); 
    Class targetClass = Class.forName(targetName); 
    Method[] methods = targetClass.getMethods();
    String operationType = "";
    String operationName = "";
    for (Method method : methods) { 
     if (method.getName().equals(methodName)) { 
      Class[] clazzs = method.getParameterTypes(); 
      if (clazzs.length == arguments.length) { 
       operationType = method.getAnnotation(Log.class).operationType();
       operationName = method.getAnnotation(Log.class).operationName();
       break; 
      } 
     } 
    }
    //*========     =========*// 
    System.out.println("=====controller      ====="); 
    System.out.println("    :" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"."+operationType); 
    System.out.println("    :" + operationName); 
    System.out.println("   :" + user.getUserName()); 
    System.out.println("  IP:" + ip); 
    //*========     =========*// 
    SysLog log = new SysLog(); 
    log.setDescription(operationName); 
    log.setMethod((joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"."+operationType); 
    log.setLogType(0); 
    log.setRequestIp(ip); 
    log.setExceptionCode(null); 
    log.setExceptionDetail( null); 
    log.setParams( null); 
    log.setCreateBy(user.getUserName());
    log.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 
    log.setRequestIp(ip);
    //      
    systemLogService.insert(log); 
    System.out.println("=====controller      ====="); 
   } catch (Exception e) { 
    //         
    logger.error("==      =="); 
    logger.error("    :{}", e.getMessage()); 
   } 
		 
		 
	 } 
	 
	 
 
  /**
	 * 
	 * @author: panliang
	 * @time:2017-3-31   2:24:36
	 * @param joinPoint    
	 * @describtion:                
	 */
  @AfterThrowing(pointcut = "controllerAspect()", throwing="e") 
  public void doAfterThrowing(JoinPoint joinPoint, Throwable e) { 
 	 
 	 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 
   HttpSession session = request.getSession(); 
   //  session     
   SysUser user = (SysUser) session.getAttribute("user"); 
   if(user==null){
   	 user=new SysUser();
   	 user.setUserName("     ");
   }
   //   IP 
   String ip = request.getRemoteAddr();
   
   String params = ""; 
   if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) { 
   
  	 params=Arrays.toString(joinPoint.getArgs());
   } 
   try { 
    
    String targetName = joinPoint.getTarget().getClass().getName(); 
    String methodName = joinPoint.getSignature().getName(); 
    Object[] arguments = joinPoint.getArgs(); 
    Class targetClass = Class.forName(targetName); 
    Method[] methods = targetClass.getMethods();
    String operationType = "";
    String operationName = "";
    for (Method method : methods) { 
     if (method.getName().equals(methodName)) { 
      Class[] clazzs = method.getParameterTypes(); 
      if (clazzs.length == arguments.length) { 
       operationType = method.getAnnotation(Log.class).operationType();
       operationName = method.getAnnotation(Log.class).operationName();
       break; 
      } 
     } 
    }
    /*========     =========*/ 
    System.out.println("=====      ====="); 
    System.out.println("    :" + e.getClass().getName()); 
    System.out.println("    :" + e.getMessage()); 
    System.out.println("    :" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"."+operationType); 
    System.out.println("    :" + operationName); 
    System.out.println("   :" + user.getUserName()); 
    System.out.println("  IP:" + ip); 
    System.out.println("    :" + params); 
    //==========     ========= 
    SysLog log = new SysLog();
    log.setDescription(operationName); 
    log.setExceptionCode(e.getClass().getName()); 
    log.setLogType(1); 
    log.setExceptionDetail(e.getMessage()); 
    log.setMethod((joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")); 
    log.setParams(params); 
    log.setCreateBy(user.getUserName()); 
    log.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 
    log.setRequestIp(ip); 
    //      
    systemLogService.insert(log); 
    System.out.println("=====      ====="); 
   } catch (Exception ex) { 
    //         
    logger.error("==      =="); 
    logger.error("    :{}", ex.getMessage()); 
   } 
   //==========        ========== 
   logger.error("    :{}    :{}    :{}  :{}", joinPoint.getTarget().getClass().getName() + joinPoint.getSignature().getName(), e.getClass().getName(), e.getMessage(), params); 
 
  } 
	 
}
5:controlllerの中にあります。

/**
	 *                       
	 * @author panliang
	 * @param request
	 * @param response
	 * @throws IOException 
	 */
	@RequestMapping("/skipPage.do")
	@Log(operationType="select  :",operationName="    ")//  :      ,              
	public ModelAndView skipPage(HttpServletRequest request,HttpServletResponse response) throws IOException{
		
		ModelAndView result=null;
		String username = request.getParameter("email");
		String password = request.getParameter("password");
		int flag = sysUserService.login(request, username, password);
		if(flag==1){//    
			result=new ModelAndView("redirect:/login/dispacher_main.do");
		}else if(flag==2){//      		
			result=new ModelAndView("redirect:/login/login.do?errorCode=1");			
		} else{//     	
			result=new ModelAndView("redirect:/login/login.do?errorCode=2");			
		}
		return result;
	}
他の3つの通知を知りたいなら、このブログを参照してください。
このように、ユーザーは楽屋に訪問する時、正常にアクセスしても、バグデータベースが発生しても記録があります。

以上のaop注解方式は全体ログ管理方法を実現しました。つまり、小編集は皆さんに全部の内容を共有しました。参考にしてもらいたいです。どうぞよろしくお願いします。