From 5fa3d7ae48250c52edf53073b0366f3d69c0090d Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 17 Feb 2009 18:19:57 +0000 Subject: [PATCH] optimized OrderComparator usage git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@649 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../aspectj/annotation/AspectJProxyFactory.java | 3 +-- .../autoproxy/AspectJPrecedenceComparator.java | 16 ++++++---------- .../aop/framework/ProxyFactoryBean.java | 8 +++----- .../AbstractAdvisorAutoProxyCreator.java | 3 +-- .../factory/support/AbstractBeanFactory.java | 6 +++--- .../support/AbstractApplicationContext.java | 9 ++++----- .../TransactionSynchronizationManager.java | 7 ++----- .../web/portlet/DispatcherPortlet.java | 8 ++++---- .../web/servlet/DispatcherServlet.java | 8 ++++---- .../view/ContentNegotiatingViewResolver.java | 2 +- 10 files changed, 29 insertions(+), 41 deletions(-) diff --git a/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectJProxyFactory.java b/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectJProxyFactory.java index 796270c58f5..047d1b40361 100644 --- a/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectJProxyFactory.java +++ b/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectJProxyFactory.java @@ -16,7 +16,6 @@ package org.springframework.aop.aspectj.annotation; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -121,7 +120,7 @@ public class AspectJProxyFactory extends ProxyCreatorSupport { List advisors = this.aspectFactory.getAdvisors(instanceFactory); advisors = AopUtils.findAdvisorsThatCanApply(advisors, getTargetClass()); AspectJProxyUtils.makeAdvisorChainAspectJCapableIfNecessary(advisors); - Collections.sort(advisors, new OrderComparator()); + OrderComparator.sort(advisors); addAdvisors(advisors); } diff --git a/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator.java b/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator.java index 0e3037f891b..c293f0be721 100644 --- a/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator.java +++ b/org.springframework.aop/src/main/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2006 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,14 +55,14 @@ class AspectJPrecedenceComparator implements Comparator { private static final int LOWER_PRECEDENCE = 1; private static final int NOT_COMPARABLE = 0; - private final Comparator advisorComparator; + private final Comparator advisorComparator; /** * Create a default AspectJPrecedenceComparator. */ public AspectJPrecedenceComparator() { - this.advisorComparator = new OrderComparator(); + this.advisorComparator = OrderComparator.INSTANCE; } /** @@ -70,7 +70,7 @@ class AspectJPrecedenceComparator implements Comparator { * for comparing {@link org.springframework.aop.Advisor} instances. * @param advisorComparator the Comparator to use for Advisors */ - public AspectJPrecedenceComparator(Comparator advisorComparator) { + public AspectJPrecedenceComparator(Comparator advisorComparator) { Assert.notNull(advisorComparator, "Advisor comparator must not be null"); this.advisorComparator = advisorComparator; } @@ -138,12 +138,8 @@ class AspectJPrecedenceComparator implements Comparator { } private boolean declaredInSameAspect(Advisor advisor1, Advisor advisor2) { - if (!(hasAspectName(advisor1) && hasAspectName(advisor2))) { - return false; - } - else { - return getAspectName(advisor1).equals(getAspectName(advisor2)); - } + return (hasAspectName(advisor1) && hasAspectName(advisor2) && + getAspectName(advisor1).equals(getAspectName(advisor2))); } private boolean hasAspectName(Advisor anAdvisor) { diff --git a/org.springframework.aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java b/org.springframework.aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java index d4b1782c8ad..21fef364ed1 100644 --- a/org.springframework.aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java +++ b/org.springframework.aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,9 +21,7 @@ import java.io.ObjectInputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -474,7 +472,7 @@ public class ProxyFactoryBean extends ProxyCreatorSupport * We need to do this every time a new prototype instance is returned, * to return distinct instances of prototype Advisors and Advices. */ - private List freshAdvisorChain() { + private List freshAdvisorChain() { Advisor[] advisors = getAdvisors(); List freshAdvisors = new ArrayList(advisors.length); for (Advisor advisor : advisors) { @@ -521,7 +519,7 @@ public class ProxyFactoryBean extends ProxyCreatorSupport beans.add(bean); names.put(bean, name); } - Collections.sort(beans, new OrderComparator()); + OrderComparator.sort(beans); for (Object bean : beans) { String name = names.get(bean); if (name.startsWith(prefix)) { diff --git a/org.springframework.aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java b/org.springframework.aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java index 3ce11a21afe..8bca7ccd9d9 100644 --- a/org.springframework.aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java +++ b/org.springframework.aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java @@ -16,7 +16,6 @@ package org.springframework.aop.framework.autoproxy; -import java.util.Collections; import java.util.List; import org.springframework.aop.Advisor; @@ -141,7 +140,7 @@ public abstract class AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyC * @see org.springframework.core.OrderComparator */ protected List sortAdvisors(List advisors) { - Collections.sort(advisors, new OrderComparator()); + OrderComparator.sort(advisors); return advisors; } diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index 2b784ec3ed0..c89d7b801e9 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -522,8 +522,8 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp aliases.add(fullBeanName); } String[] retrievedAliases = super.getAliases(beanName); - for (String retrievedAliase : retrievedAliases) { - String alias = (factoryPrefix ? FACTORY_BEAN_PREFIX : "") + retrievedAliase; + for (String retrievedAlias : retrievedAliases) { + String alias = (factoryPrefix ? FACTORY_BEAN_PREFIX : "") + retrievedAlias; if (!alias.equals(name)) { aliases.add(alias); } diff --git a/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index d54d7ff85b8..992a0e4f2d3 100644 --- a/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -19,7 +19,6 @@ package org.springframework.context.support; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -515,7 +514,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader } // First, invoke the BeanFactoryPostProcessors that implement PriorityOrdered. - Collections.sort(priorityOrderedPostProcessors, new OrderComparator()); + OrderComparator.sort(priorityOrderedPostProcessors); invokeBeanFactoryPostProcessors(beanFactory, priorityOrderedPostProcessors); // Next, invoke the BeanFactoryPostProcessors that implement Ordered. @@ -523,7 +522,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader for (String postProcessorName : orderedPostProcessorNames) { orderedPostProcessors.add(getBean(postProcessorName, BeanFactoryPostProcessor.class)); } - Collections.sort(orderedPostProcessors, new OrderComparator()); + OrderComparator.sort(orderedPostProcessors); invokeBeanFactoryPostProcessors(beanFactory, orderedPostProcessors); // Finally, invoke all other BeanFactoryPostProcessors. @@ -577,7 +576,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader } // First, register the BeanPostProcessors that implement PriorityOrdered. - Collections.sort(priorityOrderedPostProcessors, new OrderComparator()); + OrderComparator.sort(priorityOrderedPostProcessors); registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors); // Next, register the BeanPostProcessors that implement Ordered. @@ -585,7 +584,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader for (String postProcessorName : orderedPostProcessorNames) { orderedPostProcessors.add(getBean(postProcessorName, BeanPostProcessor.class)); } - Collections.sort(orderedPostProcessors, new OrderComparator()); + OrderComparator.sort(orderedPostProcessors); registerBeanPostProcessors(beanFactory, orderedPostProcessors); // Finally, register all other BeanPostProcessors. diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java index b2bc84f7d44..392a0042a62 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionSynchronizationManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ package org.springframework.transaction.support; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -77,8 +76,6 @@ public abstract class TransactionSynchronizationManager { private static final Log logger = LogFactory.getLog(TransactionSynchronizationManager.class); - private static final Comparator synchronizationComparator = new OrderComparator(); - private static final ThreadLocal> resources = new NamedThreadLocal>("Transactional resources"); @@ -295,7 +292,7 @@ public abstract class TransactionSynchronizationManager { } List synchs = synchronizations.get(); // Sort lazily here, not in registerSynchronization. - Collections.sort(synchs, synchronizationComparator); + OrderComparator.sort(synchs); // Return unmodifiable snapshot, to avoid ConcurrentModificationExceptions // while iterating and invoking synchronization callbacks that in turn // might register further synchronizations. diff --git a/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java b/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java index 70b586a9c60..05b0fe1c637 100644 --- a/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java +++ b/org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/DispatcherPortlet.java @@ -378,7 +378,7 @@ public class DispatcherPortlet extends FrameworkPortlet { if (!matchingBeans.isEmpty()) { this.handlerMappings = new ArrayList(matchingBeans.values()); // We keep HandlerMappings in sorted order. - Collections.sort(this.handlerMappings, new OrderComparator()); + OrderComparator.sort(this.handlerMappings); } } else { @@ -416,7 +416,7 @@ public class DispatcherPortlet extends FrameworkPortlet { if (!matchingBeans.isEmpty()) { this.handlerAdapters = new ArrayList(matchingBeans.values()); // We keep HandlerAdapters in sorted order. - Collections.sort(this.handlerAdapters, new OrderComparator()); + OrderComparator.sort(this.handlerAdapters); } } else { @@ -454,7 +454,7 @@ public class DispatcherPortlet extends FrameworkPortlet { if (!matchingBeans.isEmpty()) { this.handlerExceptionResolvers = new ArrayList(matchingBeans.values()); // We keep HandlerExceptionResolvers in sorted order. - Collections.sort(this.handlerExceptionResolvers, new OrderComparator()); + OrderComparator.sort(this.handlerExceptionResolvers); } } else { @@ -493,7 +493,7 @@ public class DispatcherPortlet extends FrameworkPortlet { if (!matchingBeans.isEmpty()) { this.viewResolvers = new ArrayList(matchingBeans.values()); // We keep ViewResolvers in sorted order. - Collections.sort(this.viewResolvers, new OrderComparator()); + OrderComparator.sort(this.viewResolvers); } } else { diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/DispatcherServlet.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/DispatcherServlet.java index b0c3b0715cf..acb031e07d8 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/DispatcherServlet.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/DispatcherServlet.java @@ -471,7 +471,7 @@ public class DispatcherServlet extends FrameworkServlet { if (!matchingBeans.isEmpty()) { this.handlerMappings = new ArrayList(matchingBeans.values()); // We keep HandlerMappings in sorted order. - Collections.sort(this.handlerMappings, new OrderComparator()); + OrderComparator.sort(this.handlerMappings); } } else { @@ -509,7 +509,7 @@ public class DispatcherServlet extends FrameworkServlet { if (!matchingBeans.isEmpty()) { this.handlerAdapters = new ArrayList(matchingBeans.values()); // We keep HandlerAdapters in sorted order. - Collections.sort(this.handlerAdapters, new OrderComparator()); + OrderComparator.sort(this.handlerAdapters); } } else { @@ -547,7 +547,7 @@ public class DispatcherServlet extends FrameworkServlet { if (!matchingBeans.isEmpty()) { this.handlerExceptionResolvers = new ArrayList(matchingBeans.values()); // We keep HandlerExceptionResolvers in sorted order. - Collections.sort(this.handlerExceptionResolvers, new OrderComparator()); + OrderComparator.sort(this.handlerExceptionResolvers); } } else { @@ -609,7 +609,7 @@ public class DispatcherServlet extends FrameworkServlet { if (!matchingBeans.isEmpty()) { this.viewResolvers = new ArrayList(matchingBeans.values()); // We keep ViewResolvers in sorted order. - Collections.sort(this.viewResolvers, new OrderComparator()); + OrderComparator.sort(this.viewResolvers); } } else { diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java index 8d9438505a9..67def615d39 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java @@ -156,7 +156,7 @@ public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport logger.warn("Did not find any ViewResolvers to delegate to; please configure them using the " + "'viewResolvers' property on the ContentNegotiatingViewResolver"); } - Collections.sort(this.viewResolvers, new OrderComparator()); + OrderComparator.sort(this.viewResolvers); } /**