¿Es posible el control de aspecto fino de Aspectj-autoproxy en primavera?

StackOverflow https://stackoverflow.com/questions/803942

  •  03-07-2019
  •  | 
  •  

Pregunta

Si solo agrego < aop: aspectj-autoproxy proxy-target-class = " false " / > Al comienzo de mi contexto de primavera, cada bean que implementa una interfaz obtiene un proxy JDK. Realmente me gustaría limitar el proxy A) a las clases que realmente necesitan proxies o B) clases que especifico como que necesitan proxies.

Intenté usar la estrofa aop: scoped-proxy dentro de una definición de bean xml para los beans que necesitan proxies, pero resulta que esto no parece darme un buen consejo.

También intenté agregar < aop: aspectj-autoproxy .... > cerca del final de mi archivo xml de primavera, pero antes de agregar todos los beans que necesitan proxies, pero no parece funcionar correctamente.

Tengo un lote de beans con interfaces, pero solo un puñado (bien definido) necesita consejos de AoP, y esos proxies están arruinando mis stacktraces a lo grande. (He echado un vistazo a la primavera 3.0 y sospecho que será posible allí, pero parece que está lejos).

¿Es esto posible en 2.5.X?

¿Fue útil?

Solución

Como se puede ver en AbstractAdvisorAutoProxyCreator.java línea 67 (Spring 2.5.6), el creador de autoproxy realmente solo hace lo que le pido. No se autoproxy más de lo que cree necesario.

Resulta que es el tipo de expresión de corte de punto que usa que influye mucho en la representación de esta clase; la anotación que estaba usando era

@Around(value="@target(myannotation)")

Esto básicamente significa que spring genera un proxy que decide interceptar en función del tipo de destino de invocación real. La desventaja de esto es que spring intenta hacer esto con all beans disponibles en el contexto de la aplicación. Si hubiera estado usando algo como @ en su lugar, spring estaría usando la interfaz para decidir si debería realizarse la autoproxicación, y esto se puede determinar estáticamente en el momento en que se construye el contexto de la aplicación.

Así que ahora solo tengo dos clases que son proxy;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top