Ich versuche, einen Timer-Aspekt für die Messung Methodenlaufzeit zu erstellen.Aspekt funktioniert nicht mit Spring Boot-Anwendung mit externen jar
Ich habe eine Anmerkung @Timer
genannt:
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.TYPE})
public @interface Timer {
String value();
}
Und dann habe ich den Aspekt wie folgt:
@Aspect
public class MetricAspect {
@Autowired
private MetricsFactory metricsFactory;
@Pointcut("@annotation(my.package.Timer)")
public void timerPointcut() {}
@Around("timerPointcut() ")
public Object measure(ProceedingJoinPoint joinPoint) throws Throwable {
/* Aspect logic here */
}
private Timer getClassAnnotation(MethodSignature methodSignature) {
Timer annotation;
Class<?> clazz = methodSignature.getDeclaringType();
annotation = clazz.getAnnotation(Timer.class);
return annotation;
}
ich eine Konfigurationsklasse haben wie folgt:
@Configuration
@EnableAspectJAutoProxy
public class MetricsConfiguration {
@Bean
public MetricAspect notifyAspect() {
return new MetricAspect();
}
}
Alles bis hier ist in einem abgepackten Glas definiert, das Ich benutze als Abhängigkeit in meiner Feder Boot-Anwendung
In meiner Feder Boot-Anwendung importieren ich die MetricsConfiguration
und ich gedebuggt den Code und sah, dass die MetricAspect
Bean erstellt wird.
ich es im Code wie folgt verwenden:
@Service
public class MyService {
...
@Timer("mymetric")
public void foo() {
// Some code here...
}
...
}
Aber mein Code nicht erreicht zum measure
Verfahren. Nicht sicher, was ich vermisse.
Für das Bild vervollständigt, ich habe diese Abhängigkeiten in meiner pom-Datei hinzugefügt:
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
</dependencies>
Das ist die @Configuration
Klasse ist, die MetricsConfiguration
importiert:
@Configuration
@EnableAspectJAutoProxy
@Import(MetricsConfiguration.class)
@PropertySource("classpath:application.properties")
public class ApplicationConfiguration {
}
Es ist geladen mit Spring automagically Konfiguration Laden.
Haben Sie auch feder Aspekte Abhängigkeit haben? –
Ich habe versucht, es hinzuzufügen, und es hat nicht so gut funktioniert:/ – Avi
Warum verwenden Sie Reflexion, um die Anmerkung zu erhalten? Sie können es einfach zu den Parametern der Around-Methode hinzufügen und direkt darauf zugreifen. – sheltem