diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyCreatorSupport.java b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyCreatorSupport.java index e1867efd7e..7df9a24b80 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyCreatorSupport.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyCreatorSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2018 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. @@ -34,7 +34,7 @@ public class ProxyCreatorSupport extends AdvisedSupport { private AopProxyFactory aopProxyFactory; - private List listeners = new LinkedList(); + private final List listeners = new LinkedList(); /** Set to true when the first AOP proxy has been created */ private boolean active = false; diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanFactoryAdvisorRetrievalHelper.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanFactoryAdvisorRetrievalHelper.java index c484520b89..59a2170efd 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanFactoryAdvisorRetrievalHelper.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanFactoryAdvisorRetrievalHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2018 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. @@ -16,7 +16,7 @@ package org.springframework.aop.framework.autoproxy; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; @@ -43,7 +43,7 @@ public class BeanFactoryAdvisorRetrievalHelper { private final ConfigurableListableBeanFactory beanFactory; - private String[] cachedAdvisorBeanNames; + private volatile String[] cachedAdvisorBeanNames; /** @@ -64,22 +64,19 @@ public class BeanFactoryAdvisorRetrievalHelper { */ public List findAdvisorBeans() { // Determine list of advisor bean names, if not cached already. - String[] advisorNames = null; - synchronized (this) { - advisorNames = this.cachedAdvisorBeanNames; - if (advisorNames == null) { - // Do not initialize FactoryBeans here: We need to leave all regular beans - // uninitialized to let the auto-proxy creator apply to them! - advisorNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors( - this.beanFactory, Advisor.class, true, false); - this.cachedAdvisorBeanNames = advisorNames; - } + String[] advisorNames = this.cachedAdvisorBeanNames; + if (advisorNames == null) { + // Do not initialize FactoryBeans here: We need to leave all regular beans + // uninitialized to let the auto-proxy creator apply to them! + advisorNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors( + this.beanFactory, Advisor.class, true, false); + this.cachedAdvisorBeanNames = advisorNames; } if (advisorNames.length == 0) { - return new LinkedList(); + return new ArrayList(); } - List advisors = new LinkedList(); + List advisors = new ArrayList(); for (String name : advisorNames) { if (isEligibleBean(name)) { if (this.beanFactory.isCurrentlyInCreation(name)) {