1、添加註解類
package com.shby.core.common;
import com.shby.core.enums.DatabaseCalculateEnum;
import java.lang.annotation.*;
/**
* @author: 李小龍
* @description:JAVA開發
* @created:2019/8/30
* @modified by 李小龍 on 2019/8/30
*/
@Target(ElementType.METHOD) //支持註解在方法上
@Retention(RetentionPolicy.RUNTIME) //支持運行時可用
@Documented //DOC文檔可見
@Inherited //支持繼續
public @interface DatabaseCalculate {
DatabaseCalculateEnum databaseCalculateEnum();
}
2、添加AOP類
package com.shby.core.common;
import com.shby.core.enums.DatabaseCalculateEnum;
import com.shby.core.exception.ApiException;
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.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.lang.annotation.Annotation;
/**
* @author: 李小龍
* @description:JAVA開發
* @created:2019/8/30
* @modified by 李小龍 on 2019/8/30
*/
@Aspect
@Order(0)
@Component
public class SumManager {
@Resource(name="commonOperatorRepository")
private CommonOperatorRepository commonOperatorRepository;
@Pointcut("@annotation(com.shby.core.common.DatabaseCalculate)")
private void databaseCalculate() {
}
@Around("databaseCalculate()")
public Object databaseCalculate(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs();
if(null == args[0] || null == args[1]) {
throw new ApiException(ApiException.DATABASE_COLUMN_NOT_EXIST_ERROR.getCode(), ApiException.DATABASE_COLUMN_NOT_EXIST_ERROR.getMessage());
}
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Annotation[] annotations = signature.getMethod().getAnnotations();
Object ret = null;
for(Annotation annotation : annotations) {
if(annotation instanceof DatabaseCalculate) {
DatabaseCalculate databaseCalculate = (DatabaseCalculate)annotation;
DatabaseCalculateEnum databaseCalculateEnum = databaseCalculate.databaseCalculateEnum();
switch (databaseCalculateEnum) {
case SUM:
ret = commonOperatorRepository.sum((String) args[0],args[1]);
break;
default:ret = joinPoint.proceed();
}
}
}
return ret;
}
}