This is an automated email from the ASF dual-hosted git repository.

sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a2a599794e Split proxy and JDBC of AdviceFactory (#22909)
1a2a599794e is described below

commit 1a2a599794e1ff29106f9cf5084d7bdd9073cc3f
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 16 16:27:54 2022 +0800

    Split proxy and JDBC of AdviceFactory (#22909)
---
 .../builder/ConstructorAdvisorBuilder.java         |  1 +
 .../builder/InstanceMethodAdvisorBuilder.java      |  1 +
 .../builder/StaticMethodAdvisorBuilder.java        |  1 +
 .../transformer/builder/advise/AdviceFactory.java  | 51 ++++++++++++++++++++++
 .../JDBCAdviceFactory.java}                        | 24 ++--------
 .../builder/advise/ProxyAdviceFactory.java         | 51 ++++++++++++++++++++++
 .../core/transformer/AgentTransformerTest.java     |  8 ----
 7 files changed, 109 insertions(+), 28 deletions(-)

diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
index 1e079dea3c3..f7c0e534bc6 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/ConstructorAdvisorBuilder.java
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.agent.core.plugin.advice.ConstructorAdvice;
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.ConstructorInterceptor;
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedConstructorInterceptor;
 import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
+import 
org.apache.shardingsphere.agent.core.transformer.builder.advise.AdviceFactory;
 
 import java.util.Collection;
 import java.util.List;
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
index f788d40beb6..db7e485dc38 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/InstanceMethodAdvisorBuilder.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.agent.core.plugin.interceptor.InstanceMethodInt
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedInstanceMethodAroundInterceptor;
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedInstanceMethodInterceptorArgsOverride;
 import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
+import 
org.apache.shardingsphere.agent.core.transformer.builder.advise.AdviceFactory;
 
 import java.util.Collection;
 import java.util.LinkedList;
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
index cbb637b6569..17cbb48b997 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/StaticMethodAdvisorBuilder.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.agent.core.plugin.interceptor.StaticMethodInter
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedStaticMethodAroundInterceptor;
 import 
org.apache.shardingsphere.agent.core.plugin.interceptor.composed.ComposedStaticMethodInterceptorArgsOverride;
 import org.apache.shardingsphere.agent.core.transformer.MethodAdvisor;
+import 
org.apache.shardingsphere.agent.core.transformer.builder.advise.AdviceFactory;
 
 import java.util.Collection;
 import java.util.LinkedList;
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/AdviceFactory.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/AdviceFactory.java
new file mode 100644
index 00000000000..f43e1205122
--- /dev/null
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/AdviceFactory.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.core.transformer.builder.advise;
+
+import org.apache.shardingsphere.agent.config.plugin.PluginConfiguration;
+
+import java.util.Map;
+
+/**
+ * Advice factory.
+ */
+public final class AdviceFactory {
+    
+    private final ProxyAdviceFactory proxyAdviceFactory;
+    
+    private final JDBCAdviceFactory jdbcAdviceFactory;
+    
+    private final boolean isEnhancedForProxy;
+    
+    public AdviceFactory(final ClassLoader classLoader, final Map<String, 
PluginConfiguration> pluginConfigs, final boolean isEnhancedForProxy) {
+        proxyAdviceFactory = new ProxyAdviceFactory();
+        jdbcAdviceFactory = new JDBCAdviceFactory(classLoader, pluginConfigs);
+        this.isEnhancedForProxy = isEnhancedForProxy;
+    }
+    
+    /**
+     * Get advice.
+     *
+     * @param adviceClassName advice class name
+     * @param <T> type of advice
+     * @return got advance
+     */
+    public <T> T getAdvice(final String adviceClassName) {
+        return isEnhancedForProxy ? 
proxyAdviceFactory.getAdvice(adviceClassName) : 
jdbcAdviceFactory.getAdvice(adviceClassName);
+    }
+}
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/AdviceFactory.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/JDBCAdviceFactory.java
similarity index 80%
rename from 
agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/AdviceFactory.java
rename to 
agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/JDBCAdviceFactory.java
index 15dac5d78cf..dc5cc55b540 100644
--- 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/AdviceFactory.java
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/JDBCAdviceFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.core.transformer.builder;
+package org.apache.shardingsphere.agent.core.transformer.builder.advise;
 
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -29,10 +29,10 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Advice factory.
+ * JDBC advice factory.
  */
 @RequiredArgsConstructor
-public final class AdviceFactory {
+public final class JDBCAdviceFactory {
     
     private static final Map<String, Object> CACHED_ADVICES = new 
ConcurrentHashMap<>();
     
@@ -44,8 +44,6 @@ public final class AdviceFactory {
     
     private final Map<String, PluginConfiguration> pluginConfigs;
     
-    private final boolean isEnhancedForProxy;
-    
     /**
      * Get advice.
      *
@@ -53,22 +51,8 @@ public final class AdviceFactory {
      * @param <T> type of advice
      * @return got advance
      */
-    public <T> T getAdvice(final String adviceClassName) {
-        return isEnhancedForProxy ? getAdviceForProxy(adviceClassName) : 
getAdviceForJDBC(adviceClassName);
-    }
-    
     @SuppressWarnings("unchecked")
-    private <T> T getAdviceForProxy(final String adviceClassName) {
-        return (T) CACHED_ADVICES.computeIfAbsent(adviceClassName, 
this::createAdviceForProxy);
-    }
-    
-    @SneakyThrows(ReflectiveOperationException.class)
-    private Object createAdviceForProxy(final String adviceClassName) {
-        return Class.forName(adviceClassName, true, 
AgentClassLoader.getClassLoader()).getDeclaredConstructor().newInstance();
-    }
-    
-    @SuppressWarnings("unchecked")
-    private <T> T getAdviceForJDBC(final String adviceClassName) {
+    public <T> T getAdvice(final String adviceClassName) {
         String adviceInstanceCacheKey = String.format("%s_%s@%s", 
adviceClassName, classLoader.getClass().getName(), 
Integer.toHexString(classLoader.hashCode()));
         return (T) CACHED_ADVICES.computeIfAbsent(adviceInstanceCacheKey, key 
-> createAdviceForJDBC(adviceClassName));
     }
diff --git 
a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/ProxyAdviceFactory.java
 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/ProxyAdviceFactory.java
new file mode 100644
index 00000000000..737398454f6
--- /dev/null
+++ 
b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/transformer/builder/advise/ProxyAdviceFactory.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.agent.core.transformer.builder.advise;
+
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.agent.core.classloader.AgentClassLoader;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Proxy Advice factory.
+ */
+@RequiredArgsConstructor
+public final class ProxyAdviceFactory {
+    
+    private static final Map<String, Object> CACHED_ADVICES = new 
ConcurrentHashMap<>();
+    
+    /**
+     * Get advice.
+     *
+     * @param adviceClassName advice class name
+     * @param <T> type of advice
+     * @return got advance
+     */
+    @SuppressWarnings("unchecked")
+    public <T> T getAdvice(final String adviceClassName) {
+        return (T) CACHED_ADVICES.computeIfAbsent(adviceClassName, 
this::createAdviceForProxy);
+    }
+    
+    @SneakyThrows(ReflectiveOperationException.class)
+    private Object createAdviceForProxy(final String adviceClassName) {
+        return Class.forName(adviceClassName, true, 
AgentClassLoader.getClassLoader()).getDeclaredConstructor().newInstance();
+    }
+}
diff --git 
a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
 
b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
index 01bb54416d3..01e6476db71 100644
--- 
a/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
+++ 
b/agent/core/src/test/java/org/apache/shardingsphere/agent/core/transformer/AgentTransformerTest.java
@@ -35,12 +35,10 @@ import 
org.apache.shardingsphere.agent.core.mock.advice.MockInstanceMethodAround
 import 
org.apache.shardingsphere.agent.core.mock.advice.MockStaticMethodAroundAdvice;
 import org.apache.shardingsphere.agent.core.mock.material.Material;
 import 
org.apache.shardingsphere.agent.core.mock.material.RepeatedAdviceMaterial;
-import org.apache.shardingsphere.agent.core.transformer.builder.AdviceFactory;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.internal.util.reflection.FieldReader;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -59,15 +57,9 @@ public final class AgentTransformerTest {
     private final List<String> queue = new LinkedList<>();
     
     @BeforeClass
-    @SuppressWarnings("unchecked")
     public static void setup() throws ReflectiveOperationException {
         ByteBuddyAgent.install();
         AgentClassLoader.init(Collections.emptyList());
-        FieldReader objectPoolReader = new FieldReader(AdviceFactory.class, 
AdviceFactory.class.getDeclaredField("CACHED_ADVICES"));
-        Map<String, Object> objectPool = (Map<String, Object>) 
objectPoolReader.read();
-        objectPool.put(MockConstructorAdvice.class.getTypeName(), new 
MockConstructorAdvice());
-        objectPool.put(MockInstanceMethodAroundAdvice.class.getTypeName(), new 
MockInstanceMethodAroundAdvice());
-        objectPool.put(MockStaticMethodAroundAdvice.class.getTypeName(), new 
MockStaticMethodAroundAdvice());
         Map<String, AdvisorConfiguration> advisorConfigs = new HashMap<>(2, 1);
         AdvisorConfiguration advisorConfig = createAdvisorConfiguration();
         advisorConfigs.put(advisorConfig.getTargetClassName(), advisorConfig);

Reply via email to