J'essaie de consigner l'heure d'exécution des méthodes annotées avec une interface personnalisée. J'utilise Spring AOP.AOP pour les méthodes internes et privées Java
Mais cela ne semble pas fonctionner pour les méthodes internes.
Je pense qu'il est la limitation au printemps AOP
@Aspect
public class BusinessProfiler {
private static Log log = LogFactory.getLog(BusinessProfiler.class);
@Around("execution(* *(..)) && @annotation(TimeLog)")
public Object profile(ProceedingJoinPoint point) throws Throwable {
long start = System.currentTimeMillis();
Object result = point.proceed();
String format =
String.format("%s#%s: took [%s msec]", point.getTarget().getClass().getSimpleName(),
MethodSignature.class.cast(point.getSignature()).getMethod().getName(),
System.currentTimeMillis() - start);
log.info(format);
return result;
}
}
Existe-t-il des alternatives que Spring AOP
Merci. Existe-t-il des alternatives pour réaliser mon exigence. Je pense que ça va avec CDI. Toutes les options pour intégrer l'intercepteur CDI avec Spring – Patan
Comment ce problème est-il connecté à CDI? CDI est sur l'injection de dépendance, AOP est sur l'interception de jointure. Si vous ne voulez pas modifier votre code et que vous avez besoin de capturer des classes internes, des appels de méthode via 'this' (pas via un proxy de l'extérieur) etc. vous pouvez toujours [utiliser AspectJ depuis Spring] (https: // docs. spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-using-aspectj) ou même complètement sans ressort. – kriegaex