瀏覽代碼

高版本jdk过时了clazz.newInstance

nieqiuqiu 5 年之前
父節點
當前提交
31d5721790

+ 13 - 13
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisXMLConfigBuilder.java

@@ -193,40 +193,40 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
         }
     }
 
-    private void pluginElement(XNode parent) throws Exception {
+    private void pluginElement(XNode parent) {
         if (parent != null) {
             for (XNode child : parent.getChildren()) {
                 String interceptor = child.getStringAttribute("interceptor");
                 Properties properties = child.getChildrenAsProperties();
-                Interceptor interceptorInstance = (Interceptor) resolveClass(interceptor).newInstance();
+                Interceptor interceptorInstance = (Interceptor) createInstance(interceptor);
                 interceptorInstance.setProperties(properties);
                 configuration.addInterceptor(interceptorInstance);
             }
         }
     }
 
-    private void objectFactoryElement(XNode context) throws Exception {
+    private void objectFactoryElement(XNode context) {
         if (context != null) {
             String type = context.getStringAttribute("type");
             Properties properties = context.getChildrenAsProperties();
-            ObjectFactory factory = (ObjectFactory) resolveClass(type).newInstance();
+            ObjectFactory factory = (ObjectFactory) createInstance(type);
             factory.setProperties(properties);
             configuration.setObjectFactory(factory);
         }
     }
 
-    private void objectWrapperFactoryElement(XNode context) throws Exception {
+    private void objectWrapperFactoryElement(XNode context) {
         if (context != null) {
             String type = context.getStringAttribute("type");
-            ObjectWrapperFactory factory = (ObjectWrapperFactory) resolveClass(type).newInstance();
+            ObjectWrapperFactory factory = (ObjectWrapperFactory) createInstance(type);
             configuration.setObjectWrapperFactory(factory);
         }
     }
 
-    private void reflectorFactoryElement(XNode context) throws Exception {
+    private void reflectorFactoryElement(XNode context) {
         if (context != null) {
             String type = context.getStringAttribute("type");
-            ReflectorFactory factory = (ReflectorFactory) resolveClass(type).newInstance();
+            ReflectorFactory factory = (ReflectorFactory) createInstance(type);
             configuration.setReflectorFactory(factory);
         }
     }
@@ -311,7 +311,7 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
                 type = "DB_VENDOR";
             }
             Properties properties = context.getChildrenAsProperties();
-            databaseIdProvider = (DatabaseIdProvider) resolveClass(type).newInstance();
+            databaseIdProvider = (DatabaseIdProvider) createInstance(type);
             databaseIdProvider.setProperties(properties);
         }
         Environment environment = configuration.getEnvironment();
@@ -321,22 +321,22 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
         }
     }
 
-    private TransactionFactory transactionManagerElement(XNode context) throws Exception {
+    private TransactionFactory transactionManagerElement(XNode context) {
         if (context != null) {
             String type = context.getStringAttribute("type");
             Properties props = context.getChildrenAsProperties();
-            TransactionFactory factory = (TransactionFactory) resolveClass(type).newInstance();
+            TransactionFactory factory = (TransactionFactory) createInstance(type);
             factory.setProperties(props);
             return factory;
         }
         throw new BuilderException("Environment declaration requires a TransactionFactory.");
     }
 
-    private DataSourceFactory dataSourceElement(XNode context) throws Exception {
+    private DataSourceFactory dataSourceElement(XNode context) {
         if (context != null) {
             String type = context.getStringAttribute("type");
             Properties props = context.getChildrenAsProperties();
-            DataSourceFactory factory = (DataSourceFactory) resolveClass(type).newInstance();
+            DataSourceFactory factory = (DataSourceFactory) createInstance(type);
             factory.setProperties(props);
             return factory;
         }

+ 6 - 8
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java

@@ -18,6 +18,7 @@ package com.baomidou.mybatisplus.extension.plugins.pagination;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
@@ -62,23 +63,20 @@ public class DialectFactory {
      * @return ignore
      */
     private static IDialect getDialect(DbType dbType, String dialectClazz) {
-        IDialect dialect = DIALECT_CACHE.get(dbType.getDb());
-        if (null == dialect) {
+        return DIALECT_CACHE.computeIfAbsent(dbType.getDb(), key -> {
+            IDialect dialect = null;
             String dialectClassName = StringUtils.isEmpty(dialectClazz) ? dbType.getDialect() : dialectClazz;
             try {
                 Class<?> clazz = Class.forName(dialectClassName);
                 if (IDialect.class.isAssignableFrom(clazz)) {
-                    dialect = (IDialect) clazz.newInstance();
-                    DIALECT_CACHE.put(dbType.getDb(), dialect);
+                    dialect = (IDialect) ClassUtils.newInstance(clazz);
                 }
             } catch (ClassNotFoundException e) {
                 throw ExceptionUtils.mpe("Class : %s is not found", dialectClazz);
-            } catch (IllegalAccessException | InstantiationException e) {
-                throw ExceptionUtils.mpe("Class : %s can not be instance", dialectClazz);
             }
             /* 未配置方言则抛出异常 */
             Assert.notNull(dialect, "The value of the dialect property in mybatis configuration.xml is not defined.");
-        }
-        return dialect;
+            return dialect;
+        });
     }
 }