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
.
O simplemente puede llamar a: AopUtils.html#getTargetClass(java.lang.Object)
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).