Java annotation

package com.citi.yf.annotation;

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

@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.LOCAL_VARIABLE,ElementType.METHOD,ElementType.PARAMETER,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    
    public String name();

}

package com.citi.yf.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class AnnotationProcessor {

    public static void process(Annotation... annotations){
        for (Annotation annotation : annotations) {
            if (annotation instanceof MyAnnotation) {
                System.out.println(((MyAnnotation) annotation).name());
            }
        }
    }
    
 
    public static void main(String[] args) {

        Entity entity = new Entity();
        //type
        process(Entity.class.getAnnotations());
        //constructor
        for (Constructor constructor: entity.getClass().getConstructors()) {
            process(constructor.getAnnotations());
        }
        //field
        for (Field field : entity.getClass().getDeclaredFields()) {
            process(field.getAnnotations());
        }
        //method
        for (Method method : entity.getClass().getMethods()) {
            process(method.getAnnotations());
            //param
            for (Annotation[] annotations : method.getParameterAnnotations()) {
                
                process(annotations);
            }
        }
        
    }
    
}

使用切片,切如带有注解的方法,并根据注解执行下一步操作


@Component
@Aspect
public class RedisControlAspectJ {

    final static Logger logger = LoggerFactory.getLogger(RedisControlAspectJ.class);

    static RedisUtils redisUtils = new RedisUtils();
    
    //切入点
    @Pointcut("execution(* com.impl.*.*(..))")
    public void doing() {
    }
    //符合切入点,且方法包含RedisDel注解
    @AfterReturning("doing() && @annotation(redisDel)")
    public void process(JoinPoint point, RedisDel redisDel) {

        for (RedisKeyEnum key : redisDel.redisKey()) {
            redisDeleteKey(key);
        }

    }

    void redisDeleteKey(RedisKeyEnum keyEnum) {
        String key = keyEnum.getName();
        redisUtils.delkeyObject(key);

        logger.info("delete redis ->{}", key);
    }

}

你可能感兴趣的:(Java annotation)