Question

J'utilise Spring depuis un certain temps, mais je me suis toujours demandé comment ça marche, plus précisément, comment charger et tisser des beans / classes marqués uniquement avec une interface ou @annotation .

Pour les déclarations xml, il est facile de voir comment spring traite mes haricots (ils sont déclarés dans le contexte xml que printemps lit), mais pour les classes marquées uniquement par des annotations, je ne vois pas comment cela fonctionne, car ne passez aucun agent à la JVM ou à ce moment-là.

Je pense qu’il existe un hook Java / JVM qui vous permet de prétraiter les classes selon certains critères, mais je n’ai rien trouvé dans la documentation.

Quelqu'un peut-il m'indiquer des documents? Est-ce lié à l'API java.lang.instrument.ClassFileTransformer ?

Était-ce utile?

La solution

En fait, par défaut, Spring ne le fait pas faire un post-traitement de bytecode ni pour XML-, ni Beans configurés avec des annotations. Au lieu haricots pertinents sont emballés dans dynamique procurations (voir par exemple java.lang.reflect.Proxy dans le Java SDK). Les mandataires dynamiques enveloppent le objets réels que vous utilisez et interceptez appels de méthode, permettant d'appliquer l'AOP conseils. La différence réside dans le fait que les mandataires sont essentiellement de nouvelles classes artificielles créées par le cadre, alors que le post-traitement tissage / bytecode modifie les classes existantes. Ce dernier est impossible sans l’API Instrumentation que vous avez mentionnée.

En ce qui concerne les annotations, la mise en œuvre de la balise <context:component-scan> analysera le chemin d'accès aux classes pour toutes les classes avec les annotations Spring et créera des espaces réservés pour les métadonnées Spring. Après cela, ils sont traités comme s'ils avaient été configurés via XML (ou pour être plus spécifiques, les deux sont traités de la même manière).

Bien que Spring ne fasse pas lui-même de post-traitement du bytecode, vous pouvez configurer l'agent de tissage AspectJ qui devrait fonctionner correctement avec Spring, si les procurations ne vous satisfont pas.

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