Bonjour à tous
Je suis à la recherche d'exemple d'utilisation de SPRING pour de l'AOP.
Est il préférable d'utiliser SPRING ou ASPECTJ quel est le plus simple d'utilisation?
Je vous remercie d'avance pour votre aide
Bonjour à tous
Je suis à la recherche d'exemple d'utilisation de SPRING pour de l'AOP.
Est il préférable d'utiliser SPRING ou ASPECTJ quel est le plus simple d'utilisation?
Je vous remercie d'avance pour votre aide
Pour Spring, tu as des exemple dans le package Spring lui-même.
Pour la préférence Spring/AspectJ, regardes la doc de Spring 2.0, on y parle de l'intégration d'aspectJ et justement des avantages/inconvénients de Spring AOP vs AspectJ
Exemple simple d'AOP inspiré du bouquin Pro Spring
Dans l'application-context
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 package mon.package; import java.lang.reflect.Method; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.apache.commons.lang.time.StopWatch; import org.apache.log4j.Logger; /** * Class interceptant n'importe quelle m�thode et mesure la dur�e de son * ex�cution. * * @author Thomas Noirez */ public class PerformanceInterceptor implements MethodInterceptor { /*** Le log. */ private final Logger log = Logger.getLogger(this.getClass()); /*** Temps max d'execution avant le log d'un message warning. */ private final long warningTimeInMs; /*** Temps max d'execution avant le log d'un message warning. */ private final static long WARNING_TIME_IN_MS = 300; /** * Creates a new PerformanceInterceptor object. */ public PerformanceInterceptor() { super(); this.warningTimeInMs = WARNING_TIME_IN_MS; } /** * Creates a new PerformanceInterceptor object. */ public PerformanceInterceptor(long warningTimeInMs) { super(); this.warningTimeInMs = warningTimeInMs; } /** * Mesure du temps d'execution d'une methode. * * @param methodInvocation * * @return * * @throws Throwable * */ public final Object invoke(final MethodInvocation methodInvocation) throws Throwable { StopWatch sw = new StopWatch(); sw.start(); Object o = methodInvocation.proceed(); sw.stop(); this.logInfo(methodInvocation, sw.getTime()); return o; } /** * Log des infos de la duree d'execution d'une methode * @param methodInvocation * @param ms */ private void logInfo (final MethodInvocation methodInvocation, long ms) { Method m = methodInvocation.getMethod(); Object t = methodInvocation.getThis(); String tmp = "Dur. : " + ms + " ms " + t.getClass().getName() + " " + m.getName(); if ( log.isDebugEnabled() ) { log.debug(tmp); } else if ( ms > warningTimeInMs ) { log.warn(tmp); } }
La classe PerformanceInterceptor va "intercepter" l'execution de toutes les méthodes des classes qui contiennent "Mgr" et "service" en mesurant le temps d'execution. Si le temps d'execution est supérieur à 300ms, alors log..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <bean id="performanceInterceptor" class="mon.package.PerformanceInterceptor"> <constructor-arg><value>300</value></constructor-arg> </bean> <bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref bean="performanceInterceptor"/> </property> <property name="patterns"> <list> <value>.+service\..+</value> <value>.+Mgr\..+</value> </list> </property> </bean> <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
voilà j'espére que ça pourra t'aider
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager