Lorsque vous commencez à déconner avec des trucs de proxy automatique de printemps, vous courez souvent dans ce comportement comme documenté:Traquer cause de « non admissible à l'auto-mandatement » Printemps
classes qui mettent en œuvre l'interface de BeanPostProcessor sont spéciale, et donc ils sont traités différemment par le conteneur. Tous les BeanPostProcessors et leurs directement haricots référencés seront instanciées au démarrage, dans le cadre de la phase de démarrage spéciale du ApplicationContext, tous ces BeanPostProcessors seront inscrits de façon reclassées - et appliqués à tous les autres haricots . Depuis AOP auto-mandatement est mis en œuvre en tant que BeanPostProcessor lui-même, pas BeanPostProcessors ou directement haricots référencés sont admissibles à auto-mandatement (et ne seront donc pas avoir aspects tissés »en eux.
Pour toute haricots, vous devriez voir un message de journal d'information : « 'foo' Bean n'est pas admissible à obtenir traitées par tous BeanPostProcessors (par exemple: non admissible à auto-mandatement) ».
En d'autres termes, si j'écris mon propre BeanPostProcessor et que cette classe référence directement d'autres beans dans le contexte, alors ces beans référencés ne seront pas éligibles pour l'auto-proxying, et un message est enregistré à cet effet. Mon problème est que dépister où cette référence directe est peut être très difficile, puisque la "référence directe" peut en fait être une chaîne de dépendances transitives qui finit par prendre la moitié des beans dans le contexte d'application. Tout le printemps vous donne ce message d'information unique, et ce n'est pas vraiment beaucoup d'aide, au-delà de vous dire quand un haricot a été pris dans ce réseau de références.
Le BeanPostProcessor que je développe possède des références directes à d'autres beans, mais c'est un ensemble très limité de références. Malgré cela, à peu près tous les beans dans mon contexte sont exclus de l'auto-proxy, selon les messages du journal, mais je ne peux pas voir où cette dépendance se produit.
Est-ce que quelqu'un a trouvé une meilleure façon de dépister cela?
Vous pouvez également obtenir ce message d'information pour les classes 'PersistenceExceptionTranslator'. – Raedwald