ISSUE #1079: use CachingStatsProvider underly FinagleStatsProvider

Descriptions of the changes in this PR:
use CachingStatsProvider underly FinagleStatsProvider to avoid creating a lot of brand new object

Master Issue: #1079

Author: Jia Zhai <zhaijia@apache.org>

Reviewers: Sijie Guo <sijie@apache.org>

This closes #1082 from jiazhai/issue-1079, closes #1079

(cherry picked from commit c2d53a4c1781360a4fb5635e91f7fe133475c160)
Signed-off-by: Sijie Guo <sijie@apache.org>
diff --git a/bookkeeper-stats-providers/twitter-finagle-provider/src/main/java/org/apache/bookkeeper/stats/twitter/finagle/FinagleStatsProvider.java b/bookkeeper-stats-providers/twitter-finagle-provider/src/main/java/org/apache/bookkeeper/stats/twitter/finagle/FinagleStatsProvider.java
index affe2f9..aff129d 100644
--- a/bookkeeper-stats-providers/twitter-finagle-provider/src/main/java/org/apache/bookkeeper/stats/twitter/finagle/FinagleStatsProvider.java
+++ b/bookkeeper-stats-providers/twitter-finagle-provider/src/main/java/org/apache/bookkeeper/stats/twitter/finagle/FinagleStatsProvider.java
@@ -18,6 +18,7 @@
 package org.apache.bookkeeper.stats.twitter.finagle;
 
 import com.twitter.finagle.stats.StatsReceiver;
+import org.apache.bookkeeper.stats.CachingStatsProvider;
 import org.apache.bookkeeper.stats.StatsLogger;
 import org.apache.bookkeeper.stats.StatsProvider;
 import org.apache.commons.configuration.Configuration;
@@ -29,9 +30,28 @@
  */
 public class FinagleStatsProvider implements StatsProvider {
     private final StatsReceiver stats;
+    private final CachingStatsProvider cachingStatsProvider;
 
     public FinagleStatsProvider(final StatsReceiver stats) {
         this.stats = stats;
+        this.cachingStatsProvider = new CachingStatsProvider(
+            new StatsProvider() {
+                @Override
+                public void start(Configuration conf) {
+                    // nop
+                }
+
+                @Override
+                public void stop() {
+                    // nop
+                }
+
+                @Override
+                public StatsLogger getStatsLogger(String scope) {
+                    return new FinagleStatsLoggerImpl(stats.scope(scope));
+                }
+            }
+        );
     }
 
     @Override
@@ -42,6 +62,6 @@
 
     @Override
     public StatsLogger getStatsLogger(final String scope) {
-        return new FinagleStatsLoggerImpl(this.stats.scope(scope));
+        return this.cachingStatsProvider.getStatsLogger(scope);
     }
 }