java-Annotation 反射

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

猜你喜欢

转载自wangxinchun.iteye.com/blog/2319701