1. 程式人生 > 其它 >定義一個自定義註解

定義一個自定義註解

package com.jay.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 日誌註解(定義一個註解(@Interface),並新增目標註解指向方法、以及設定執行時有效)
* @author jay
*/ @Target({ ElementType.METHOD })//標誌這個註解作用於方法
@Retention(RetentionPolicy.RUNTIME)//標誌這個註解執行時有效 public @interface LogAnnotation { String module() default ""; }
package com.jay.advice;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import com.jay.annotation.LogAnnotation; import com.jay.model.SysLogs; import com.jay.service.SysLogService; import io.swagger.annotations.ApiOperation;
/** * 統一日誌處理 */ @Aspect @Component public class LogAdvice { @Autowired private SysLogService logService; //攔截LogAnnotation @Around(value = "@annotation(com.jay.annotation.LogAnnotation)") public Object logSave(ProceedingJoinPoint joinPoint) throws Throwable { SysLogs sysLogs = new SysLogs(); sysLogs.setUser("admin"); // 設定當前登入使用者 //獲取註解上的方法 MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); String module = null; //獲取自定義日誌註解上(@LogAnnotation)的返回值 LogAnnotation logAnnotation = methodSignature.getMethod().getDeclaredAnnotation(LogAnnotation.class); module = logAnnotation.module(); //若定義的日誌註解上沒有設定返回值,則取swagger的@ApiOperation註解上設定的返回值 if (StringUtils.isEmpty(module)) { ApiOperation apiOperation = methodSignature.getMethod().getDeclaredAnnotation(ApiOperation.class); if (apiOperation != null) { module = apiOperation.value(); } } if (StringUtils.isEmpty(module)) { throw new RuntimeException("沒有設定日誌"); } sysLogs.setModule(module); try { Object object = joinPoint.proceed(); sysLogs.setFlag(true); return object; } catch (Exception e) { sysLogs.setFlag(false); sysLogs.setRemark(e.getMessage()); throw e; } finally { if (sysLogs.getUser() != null) { logService.save(sysLogs); } } } }