JAVA註解的基本應用 AOP實現

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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章