Un contrôle fin de l'aspectj-autoproxy à grain fin est-il possible au printemps?

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

  •  03-07-2019
  •  | 
  •  

Question

Si je viens d'ajouter < aop: aspectj-autoproxy proxy-target-class = & "faux &" / > Au début de mon contexte printanier, chaque bean implémentant une interface obtient un proxy JDK. J'aimerais vraiment limiter le proxy A) aux classes qui ont réellement besoin de proxy ou aux classes B) que je spécifie comme ayant besoin de proxy.

J'ai essayé d'utiliser la strophe aop: scoped-proxy dans une définition de haricot xml pour les haricots qui ont besoin d'un proxy, mais il s'avère que cela ne semble pas me donner un conseil aopé.

J'ai également essayé d'ajouter < aop: aspectj-autoproxy .... > vers la fin de mon fichier XML printanier, mais avant d’ajouter tous les haricots nécessitant un proxy, mais cela ne semble pas fonctionner correctement.

J'ai beaucoup de beans avec des interfaces, mais seule une poignée (bien définie) a besoin d'un conseil sur l'AoP, et ces proxies gâchent mon stacktraces. (J'ai jeté un coup d'œil au printemps 3.0 et je pense que ce sera possible, mais il me semble que c'est loin d'être le cas).

Est-ce possible dans 2.5.X?

Était-ce utile?

La solution

Comme on peut le voir dans la ligne 67 de AbstractAdvisorAutoProxyCreator.java (Spring 2.5.6), le créateur d’autoproxy ne fait vraiment que ce que je lui demande. Il ne fait pas autoproxy plus qu'il ne le pense nécessaire.

Il s’avère que c’est le genre d’expression ponctuelle que vous utilisez qui influe grandement sur le nombre de mandataires de cette classe; l'annotation que j'utilisais était

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

Cela signifie essentiellement que spring génère un proxy qui décide d'intercepter en fonction du type de la cible d'invocation réelle. L'inconvénient est que Spring tente de le faire avec tous les beans disponibles dans le contexte de l'application. Si au lieu de cela, je utilisais quelque chose comme @, spring utilisait l'interface pour décider si l'autoproxylation devait avoir lieu, ce qui peut être déterminé statiquement au moment de la construction du contexte d'application.

Alors maintenant, je n'ai que deux classes soumises à un proxy;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top