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注解的使用的主要内容,如果未能解决你的问题,请参考以下文章
LockSupport.java 中的 FIFO 互斥代码片段