xmlns util scan namespace example context component beans bean java spring spring-aop

java - util - Obtener objeto de clase real para Spring bean



spring xml configuration example (3)

Estoy usando Spring para inyectar frijoles. Y estoy usando algunas anotaciones para anotar los métodos de bean (Seguridad, Gestión de transacciones, Gestión de excepciones, Registro). El problema es:

Quiero crear la prueba JUnit para comprobar si olvidé anotar algunos métodos. Pero Spring devuelve la clase $ ProxyXXX sin ninguna anotación sobre los métodos.

Method[] methods = logic.getClass().getMethods(); for (Method method : methods) { Annotation[] annotations = method.getAnnotations(); // empty array!

¿Cómo puedo obtener anotaciones para el método u obtener un objeto de clase real?

PS Spring 2.5.6, JDKDynamicProxy (no CGLib)


Los proxies basados ​​en la interfaz de Spring implementan TargetClassAware .



Puede convertir el objeto proxy para obtener el objeto y la clase para los que actúa como proxy (consulte TargetSource ):

Advised advised = (Advised) proxy; Class<?> cls = advised.getTargetSource().getTargetClass();

En general, debe seguir los principios de Spring y seguir obteniendo la clase correcta lo más discreta posible. Lo que significa que la menor cantidad de clases posible dependerá de las API de Spring Framework (tal vez agregue un ClassLocator y una implementación SpringProxyClassLocator).