IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Question propagation advices Spring


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut Question propagation advices Spring
    Help!
    Je veux utiliser Spring afin de logger mon programme en utilisant ces capacites AOP.
    Or les seuls methodes loggées sont les methodes "top level" ,les methodes appeles dans les methodes "top level" ne sont pas
    loggées.
    Voici un example

    J'ai la classe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A {
    public void m2()
    {
    //fais un truc
    }
     
    public void m1();
    {
     //appel a m2()
     m2();
     
    }
    }
    Puis une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    test(
    public static void main(String[] args) throws Exception {
     
    		ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"SpringContext.xml"} );
    		A a = (A) context.getBean("beanA");
    		a.m1();
     
     
     
    	}
    Dans ce cas l'appel a la methode m1 est bien loggé par contre dans cette methode l'appel a la méthode m2 n'est pas loggé.
    Si je fais a.m2() la ca fonctionne.

    Mon springContext.xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <aop:config>
    		<aop:pointcut id="servicePointcut"  expression="execution( * *(..))"/>    	
    		<aop:aspect id="loggingAspect" ref="monLogger">
    		    <aop:before method="logMethodEntry"  pointcut-ref="servicePointcut"/>    	
     
    	    </aop:aspect>	    
    	</aop:config>

    Y'a t'il un principe qui m'aurait echappe?Ou ma faconde faire?

    D'avance merci.

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Billets dans le blog
    2
    Par défaut
    Il faut bien comprendre que l'AOP de Spring est basée sur les proxys.

    Cela veut dire que lorsque tu récupères un bean sur lequel des aspects sont positionnés depuis un contexte spring, tu obtiens non pas directement l'instance de ton bean mais un proxy sur celui-ci. Lorsque tu appelles une méthode sur le proxy, celui-ci va déléguer au bean mais aussi appeler ses aspects.

    Revenons à ton problème : lorsque tu appelles m2() directement depuis m1(), tu es déjà dans ton bean, donc pas de proxy, donc pas d'aspect.

    Il s'agit là juste d'une limite de Spring AOP.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Par défaut
    OK merci c'est tout a fait clair.Le proxy "decore" la methode m1.Bon ben ,cela
    confirme qu'il est difficile d'utiliser spring sur une application non concue dans cet optique.

Discussions similaires

  1. [Security] Question Générale sur Spring Security
    Par Livingstone dans le forum Spring
    Réponses: 1
    Dernier message: 18/10/2012, 15h05
  2. [Framework] Question générale sur Spring
    Par michon dans le forum Spring
    Réponses: 4
    Dernier message: 26/05/2011, 09h18
  3. [Data] encore une question lazy loading spring hibernate
    Par Fred_Bogota dans le forum Spring
    Réponses: 3
    Dernier message: 24/10/2009, 15h31
  4. SPRING ONE : premiers essais (réussis), premières questions
    Par gifffftane dans le forum Mandriva / Mageia
    Réponses: 1
    Dernier message: 12/05/2007, 14h58
  5. [Framework] Questions sur l'utilisation de spring
    Par mlequim dans le forum Spring
    Réponses: 10
    Dernier message: 01/02/2006, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo