java-Annotation 反射
程序员文章站
2022-04-05 21:14:58
...
java中的注解也可以反射
切面注解:
测试:
输出:
@annotation(com.gym.Monitor)
ssss
切面注解:
@Aspect public class LogAspect { @Around(value = "@annotation(com.gym.Monitor)",argNames = "ssss") public Object log(ProceedingJoinPoint pjp) throws Throwable{ System.out.println("BEGIN-------------------" +pjp+"-------------------"); Object obj = pjp.proceed(); System.out.println("END-------------------" +pjp+"-------------------"+obj); return obj; } }
测试:
@Test public void testAspectJAnnotation() throws Exception{ LogAspect la = new LogAspect(); Method method = la.getClass().getMethod("log", ProceedingJoinPoint.class); Annotation annotation = method.getAnnotation(Around.class); String s = resolveExpression(annotation); System.out.println(s); Object obj = annotation.getClass().getMethod("argNames").invoke(annotation); System.out.println(obj); } private String resolveExpression(Annotation annotation) throws Exception { String[] EXPRESSION_PROPERTIES = new String[] {"value", "pointcut"}; String expression = null; for (String methodName : EXPRESSION_PROPERTIES) { Method method; try { method = annotation.getClass().getDeclaredMethod(methodName); } catch (NoSuchMethodException ex) { method = null; } if (method != null) { String candidate = (String) method.invoke(annotation); if (StringUtils.hasText(candidate)) { expression = candidate; } } } return expression; }
输出:
@annotation(com.gym.Monitor)
ssss