diff --git a/metrics/pom.xml b/metrics/pom.xml
index 014931a957..4cd9f3de79 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -86,6 +86,24 @@
${spectator-api.version}
+
+ io.astefanutti.metrics.aspectj
+ metrics-aspectj
+ ${metrics-aspectj.version}
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+ io.astefanutti.metrics.aspectj
+ metrics-aspectj-deps
+ ${metrics-aspectj.version}
+
+
org.assertj
assertj-core
@@ -104,6 +122,7 @@
0.57.1
2.0.7.RELEASE
3.11.1
+ 1.1.0
diff --git a/metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java b/metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java
new file mode 100644
index 0000000000..5bcf196035
--- /dev/null
+++ b/metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java
@@ -0,0 +1,34 @@
+package com.baeldung.metrics.aspectj;
+
+import com.codahale.metrics.ConsoleReporter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.SharedMetricRegistries;
+import java.io.PrintStream;
+import java.util.concurrent.TimeUnit;
+
+public class MetricsAspectJMain {
+ private static final MetricRegistry REGISTRY = new MetricRegistry();
+
+ public static void main(String args[]) throws InterruptedException {
+ startReport();
+
+ ObjectRunner runner = new ObjectRunner();
+
+ for (int i = 0; i < 5; i++) {
+ runner.run();
+ }
+
+ Thread.sleep(3000L);
+ }
+
+ private static void startReport() {
+ SharedMetricRegistries.add(ObjectRunner.REGISTRY_NAME, REGISTRY);
+
+ ConsoleReporter.forRegistry(REGISTRY)
+ .convertRatesTo(TimeUnit.SECONDS)
+ .convertDurationsTo(TimeUnit.MILLISECONDS)
+ .outputTo(new PrintStream(System.out))
+ .build()
+ .start(3, TimeUnit.SECONDS);
+ }
+}
diff --git a/metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java b/metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java
new file mode 100644
index 0000000000..ffded9bdb6
--- /dev/null
+++ b/metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java
@@ -0,0 +1,22 @@
+package com.baeldung.metrics.aspectj;
+
+import com.codahale.metrics.annotation.Timed;
+import io.astefanutti.metrics.aspectj.Metrics;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Metrics( registry = ObjectRunner.REGISTRY_NAME)
+public class ObjectRunner {
+
+ private static final Logger logger = LoggerFactory.getLogger(ObjectRunner.class);
+ public static final String REGISTRY_NAME = "ObjectRunner";
+
+ @Timed(name = "timerName")
+ public void run() {
+ logger.info("run");
+ try {
+ Thread.sleep(1000L);
+ } catch (InterruptedException e) {
+ }
+ }
+}