java注解的使用

Posted 永远的七号

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java注解的使用相关的知识,希望对你有一定的参考价值。

  注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。

 

1.自定义注解的两种实现方法

第一种 反射

public class MyRateTest {
    private Method method;
    private MyRate myRate;
    private Annotation ann;


    @MyRate
    public void test(){
        System.out.println("this is method");
    }

    @Before
    public void init(){
        method = ReflectionUtils.findMethod(MyRateTest.class,"test");
        myRate = method.getDeclaredAnnotation(MyRate.class);
        ann = method.getDeclaredAnnotation(MyRate.class);
        System.out.println("@before init ~~");
        System.out.println(ann == myRate);
    }

    @Test
    public void test1() throws Exception{
        long time = System.currentTimeMillis();

        Method[] methods = new MyRateTest().getClass().getDeclaredMethods();for(Method method : methods){if(method.getAnnotation(MyRate.class) != null){
        //业务操作 System.out.println(method.getAnnotation(MyRate.
class)); method.invoke(new MyRateTest(),null); } } System.out.println("time "+ (System.currentTimeMillis() - time)); } @After public void after(){ System.out.println("this is after"); } @After public void after2(){ System.out.println("this is after2"); } }

 

第二种 spring 切面

@Pointcut("@within(com.xxx.RateLimit)")
    public void pointcut() {
    }

 @Around("pointcut()")
    public Object around(JoinPoint joinPoint) throws Throwable {
        MethodInvocationProceedingJoinPoint methodJoinPoint = (MethodInvocationProceedingJoinPoint) joinPoint;
        Method method = ((MethodSignature) methodJoinPoint.getSignature()).getMethod();
        String methodName = method.getName();
        String className = method.getDeclaringClass().getName();
        String argClassNames = JSON.toJSONString(getMethodParameterClassNames(method));
        String keyField = className + "";
        Config config = null;
        try {
            MethodTarget target;
            if ((config = allConfigs.get(keyField)) != null) {
                target = config.getTarget();
                int argNo = target.getArgNo();
                String fieldName = target.getFieldName();
                String fieldValue = getFieldValue(methodJoinPoint, argNo, fieldName);
                String key = className + methodName + argClassNames + argNo + fieldName + fieldValue;
                config = fieldConfigs.get(key);
            }
        } catch (Exception e) {
            log.error("get config error", e);
        }
        doGetRateLimit(config);
        try {
            return methodJoinPoint.proceed();
        } finally {
            doReleaseRateLimit(config);
        }
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考 : https://www.cnblogs.com/xdp-gacl/p/3622275.html

以上是关于java注解的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用Java代码和注解完成Spring配置

LockSupport.java 中的 FIFO 互斥代码片段

如何在片段中使用 GetJsonFromUrlTask​​.java

如何在java web项目中添加自定义注解

# Java 常用代码片段

# Java 常用代码片段