欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java-Annotation 反射

程序员文章站 2022-04-05 21:14:58
...
java中的注解也可以反射

切面注解:
@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