summaryrefslogtreecommitdiff
path: root/spring-aop/src/main
diff options
context:
space:
mode:
authorEmmanuel Bourg <ebourg@apache.org>2016-08-02 11:51:52 +0200
committerEmmanuel Bourg <ebourg@apache.org>2016-08-02 11:51:52 +0200
commit9eaca6a06af3cbceb3754de19d477be770614265 (patch)
tree66e994251c7f0b375772be30bdedd383d082c357 /spring-aop/src/main
parentf69f2a4b8ea697b3a631c0dc7a470e3c9793fee3 (diff)
Imported Upstream version 4.2.7
Diffstat (limited to 'spring-aop/src/main')
-rw-r--r--spring-aop/src/main/java/org/springframework/aop/support/AbstractBeanFactoryPointcutAdvisor.java30
1 files changed, 27 insertions, 3 deletions
diff --git a/spring-aop/src/main/java/org/springframework/aop/support/AbstractBeanFactoryPointcutAdvisor.java b/spring-aop/src/main/java/org/springframework/aop/support/AbstractBeanFactoryPointcutAdvisor.java
index e46ee28c..2c2eff5f 100644
--- a/spring-aop/src/main/java/org/springframework/aop/support/AbstractBeanFactoryPointcutAdvisor.java
+++ b/spring-aop/src/main/java/org/springframework/aop/support/AbstractBeanFactoryPointcutAdvisor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2016 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.
@@ -23,6 +23,7 @@ import org.aopalliance.aop.Advice;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.util.Assert;
/**
@@ -72,8 +73,23 @@ public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcu
@Override
public void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
+ resetAdviceMonitor();
}
+ private void resetAdviceMonitor() {
+ if (this.beanFactory instanceof ConfigurableBeanFactory) {
+ this.adviceMonitor = ((ConfigurableBeanFactory) this.beanFactory).getSingletonMutex();
+ }
+ else {
+ this.adviceMonitor = new Object();
+ }
+ }
+
+ /**
+ * Specify a particular instance of the target advice directly,
+ * avoiding lazy resolution in {@link #getAdvice()}.
+ * @since 3.1
+ */
public void setAdvice(Advice advice) {
synchronized (this.adviceMonitor) {
this.advice = advice;
@@ -93,7 +109,15 @@ public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcu
@Override
public String toString() {
- return getClass().getName() + ": advice bean '" + getAdviceBeanName() + "'";
+ StringBuilder sb = new StringBuilder(getClass().getName());
+ sb.append(": advice ");
+ if (this.adviceBeanName != null) {
+ sb.append("bean '").append(this.adviceBeanName).append("'");
+ }
+ else {
+ sb.append(this.advice);
+ }
+ return sb.toString();
}
@@ -106,7 +130,7 @@ public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcu
ois.defaultReadObject();
// Initialize transient fields.
- this.adviceMonitor = new Object();
+ resetAdviceMonitor();
}
}