diff --git a/plugin-default-impl/nacos-default-auth-plugin/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence/handler/PageHandlerAdapterFactory.java b/plugin-default-impl/nacos-default-auth-plugin/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence/handler/PageHandlerAdapterFactory.java index 37dc4be6983..50f8e428b04 100644 --- a/plugin-default-impl/nacos-default-auth-plugin/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence/handler/PageHandlerAdapterFactory.java +++ b/plugin-default-impl/nacos-default-auth-plugin/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence/handler/PageHandlerAdapterFactory.java @@ -24,6 +24,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Collections; +import java.util.function.Consumer; /** * pagination factory. @@ -31,54 +33,43 @@ * @author huangKeMing */ public class PageHandlerAdapterFactory { - - private static PageHandlerAdapterFactory instance; - - private List handlerAdapters; - - private Map handlerAdapterMap; - + + private final List handlerAdapters; + + private final Map handlerAdapterMap; + public List getHandlerAdapters() { return handlerAdapters; } - + public Map getHandlerAdapterMap() { return handlerAdapterMap; } - + private PageHandlerAdapterFactory() { - handlerAdapters = new ArrayList<>(3); - handlerAdapterMap = new HashMap<>(3); - initHandlerAdapters(); - } - - public static PageHandlerAdapterFactory getInstance() { - if (instance == null) { - synchronized (PageHandlerAdapterFactory.class) { - if (instance == null) { - instance = new PageHandlerAdapterFactory(); - } - } - } - return instance; - } - - /** - * init handler adapters. - */ - private void initHandlerAdapters() { + List handlerAdapters = new ArrayList<>(3); + Map handlerAdapterMap = new HashMap<>(3); + Consumer addHandlerAdapter = handlerAdapter -> { + handlerAdapters.add(handlerAdapter); + handlerAdapterMap.put(handlerAdapter.getClass().getName(), handlerAdapter); + }; // MysqlPageHandlerAdapter - addHandlerAdapter(new MysqlPageHandlerAdapter()); + addHandlerAdapter.accept(new MysqlPageHandlerAdapter()); // DerbyPageHandlerAdapter - addHandlerAdapter(new DerbyPageHandlerAdapter()); + addHandlerAdapter.accept(new DerbyPageHandlerAdapter()); // DefaultPageHandlerAdapter - addHandlerAdapter(new DefaultPageHandlerAdapter()); + addHandlerAdapter.accept(new DefaultPageHandlerAdapter()); + this.handlerAdapters = Collections.unmodifiableList(handlerAdapters); + this.handlerAdapterMap = Collections.unmodifiableMap(handlerAdapterMap); + } + + private static final class InstanceHolder { + static final PageHandlerAdapterFactory INSTANCE = new PageHandlerAdapterFactory(); } - - private void addHandlerAdapter(PageHandlerAdapter handlerAdapter) { - handlerAdapters.add(handlerAdapter); - handlerAdapterMap.put(handlerAdapter.getClass().getName(), handlerAdapter); + + public static PageHandlerAdapterFactory getInstance() { + return InstanceHolder.INSTANCE; } - + }