Store InvocationBuilderListenerStage into Runtime not to look up builder listeners each request

Signed-off-by: jansupol <jan.supol@oracle.com>
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/ClientRuntime.java b/core-client/src/main/java/org/glassfish/jersey/client/ClientRuntime.java
index e19d787..7ce73b8 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/ClientRuntime.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/ClientRuntime.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -81,6 +81,7 @@
 
     private final InvocationInterceptorStages.PreInvocationInterceptorStage preInvocationInterceptorStage;
     private final InvocationInterceptorStages.PostInvocationInterceptorStage postInvocationInterceptorStage;
+    private final InvocationBuilderListenerStage invocationBuilderListenerStage;
 
     /**
      * Create new client request processing runtime.
@@ -94,6 +95,8 @@
         Provider<Ref<ClientRequest>> clientRequest =
                 () -> injectionManager.getInstance(new GenericType<Ref<ClientRequest>>() {}.getType());
 
+        invocationBuilderListenerStage = new InvocationBuilderListenerStage(injectionManager);
+
         RequestProcessingInitializationStage requestProcessingInitializationStage =
                 new RequestProcessingInitializationStage(clientRequest, bootstrapBag.getMessageBodyWorkers(), injectionManager);
 
@@ -399,4 +402,8 @@
     InjectionManager getInjectionManager() {
         return injectionManager;
     }
+
+    InvocationBuilderListenerStage getInvocationBuilderListenerStage() {
+        return invocationBuilderListenerStage;
+    }
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/JerseyWebTarget.java b/core-client/src/main/java/org/glassfish/jersey/client/JerseyWebTarget.java
index a134664..483e22e 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/JerseyWebTarget.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/JerseyWebTarget.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -368,7 +368,7 @@
     }
 
     private static JerseyInvocation.Builder onBuilder(JerseyInvocation.Builder builder) {
-        new InvocationBuilderListenerStage(builder.request().getInjectionManager()).invokeListener(builder);
+        builder.request().getClientRuntime().getInvocationBuilderListenerStage().invokeListener(builder);
         return builder;
     }
 }