diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java index ecc70282e2..4a3835bcdb 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java @@ -248,20 +248,26 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence } /** - * Set by creator of this advice object if the argument names are known. - *
This could be for example because they have been explicitly specified in XML, + * Set by the creator of this advice object if the argument names are known. + *
This could be for example because they have been explicitly specified in XML * or in an advice annotation. - * @param argNames comma delimited list of arg names + * @param argumentNames comma delimited list of argument names */ - public void setArgumentNames(String argNames) { - String[] tokens = StringUtils.commaDelimitedListToStringArray(argNames); + public void setArgumentNames(String argumentNames) { + String[] tokens = StringUtils.commaDelimitedListToStringArray(argumentNames); setArgumentNamesFromStringArray(tokens); } - public void setArgumentNamesFromStringArray(String... args) { - this.argumentNames = new String[args.length]; - for (int i = 0; i < args.length; i++) { - this.argumentNames[i] = args[i].strip(); + /** + * Set by the creator of this advice object if the argument names are known. + *
This could be for example because they have been explicitly specified in XML + * or in an advice annotation. + * @param argumentNames list of argument names + */ + public void setArgumentNamesFromStringArray(String... argumentNames) { + this.argumentNames = new String[argumentNames.length]; + for (int i = 0; i < argumentNames.length; i++) { + this.argumentNames[i] = argumentNames[i].strip(); if (!isVariableName(this.argumentNames[i])) { throw new IllegalArgumentException( "'argumentNames' property of AbstractAspectJAdvice contains an argument name '" + diff --git a/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java b/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java index 26147f825a..e1f60b9302 100644 --- a/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java +++ b/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2023 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. @@ -52,8 +52,8 @@ import org.springframework.util.ObjectUtils; * *
Implementing ApplicationEventMulticaster's actual {@link #multicastEvent} method
* is left to subclasses. {@link SimpleApplicationEventMulticaster} simply multicasts
- * all events to all registered listeners, invoking them in the calling thread.
- * Alternative implementations could be more sophisticated in those respects.
+ * all events to all registered listeners, invoking them in the calling thread by
+ * default. Alternative implementations could be more sophisticated in those respects.
*
* @author Juergen Hoeller
* @author Stephane Nicoll
@@ -82,10 +82,10 @@ public abstract class AbstractApplicationEventMulticaster
@Override
public void setBeanFactory(BeanFactory beanFactory) {
- if (!(beanFactory instanceof ConfigurableBeanFactory)) {
+ if (!(beanFactory instanceof ConfigurableBeanFactory cbf)) {
throw new IllegalStateException("Not running in a ConfigurableBeanFactory: " + beanFactory);
}
- this.beanFactory = (ConfigurableBeanFactory) beanFactory;
+ this.beanFactory = cbf;
if (this.beanClassLoader == null) {
this.beanClassLoader = this.beanFactory.getBeanClassLoader();
}
@@ -373,8 +373,8 @@ public abstract class AbstractApplicationEventMulticaster
protected boolean supportsEvent(
ApplicationListener> listener, ResolvableType eventType, @Nullable Class> sourceType) {
- GenericApplicationListener smartListener = (listener instanceof GenericApplicationListener ?
- (GenericApplicationListener) listener : new GenericApplicationListenerAdapter(listener));
+ GenericApplicationListener smartListener = (listener instanceof GenericApplicationListener gal ? gal :
+ new GenericApplicationListenerAdapter(listener));
return (smartListener.supportsEventType(eventType) && smartListener.supportsSourceType(sourceType));
}
diff --git a/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java b/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java
index d64a4d24ce..5a0ab50a8f 100644
--- a/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java
+++ b/spring-context/src/test/java/org/springframework/context/event/AnnotationDrivenEventListenerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2022 the original author or authors.
+ * Copyright 2002-2023 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.
@@ -111,7 +111,7 @@ class AnnotationDrivenEventListenerTests {
this.eventCollector.assertTotalEventsCount(1);
context.getBean(ApplicationEventMulticaster.class).removeApplicationListeners(l ->
- l instanceof SmartApplicationListener && ((SmartApplicationListener) l).getListenerId().contains("TestEvent"));
+ l instanceof SmartApplicationListener sal && sal.getListenerId().contains("TestEvent"));
this.eventCollector.clear();
this.context.publishEvent(event);
this.eventCollector.assertNoEventReceived(listener);
@@ -132,7 +132,7 @@ class AnnotationDrivenEventListenerTests {
this.eventCollector.assertTotalEventsCount(1);
context.getBean(ApplicationEventMulticaster.class).removeApplicationListeners(l ->
- l instanceof SmartApplicationListener && ((SmartApplicationListener) l).getListenerId().contains("TestEvent"));
+ l instanceof SmartApplicationListener sal && sal.getListenerId().contains("TestEvent"));
this.eventCollector.clear();
this.context.publishEvent(event);
this.eventCollector.assertNoEventReceived(listener);
@@ -150,7 +150,7 @@ class AnnotationDrivenEventListenerTests {
this.eventCollector.assertTotalEventsCount(1);
context.getBean(ApplicationEventMulticaster.class).removeApplicationListeners(l ->
- l instanceof SmartApplicationListener && ((SmartApplicationListener) l).getListenerId().equals("foo"));
+ l instanceof SmartApplicationListener sal && sal.getListenerId().equals("foo"));
this.eventCollector.clear();
this.context.publishEvent(event);
this.eventCollector.assertNoEventReceived(bean);
diff --git a/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java b/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java
index 57cf91155a..ea7e55cb4c 100644
--- a/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java
+++ b/spring-context/src/test/java/org/springframework/context/event/ApplicationContextEventTests.java
@@ -39,7 +39,6 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.context.ApplicationListener;
import org.springframework.context.PayloadApplicationEvent;
-import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.context.support.StaticMessageSource;
@@ -59,6 +58,7 @@ import static org.mockito.BDDMockito.willThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.springframework.context.support.AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME;
/**
* Unit and integration tests for the ApplicationContext event support.
@@ -163,7 +163,7 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
willThrow(thrown).given(listener).onApplicationEvent(evt);
assertThatRuntimeException()
.isThrownBy(() -> smc.multicastEvent(evt))
- .satisfies(ex -> assertThat(ex).isSameAs(thrown));
+ .isSameAs(thrown);
}
@Test
@@ -282,20 +282,14 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
context.publishEvent(event3);
MyOtherEvent event4 = new MyOtherEvent(context);
context.publishEvent(event4);
- assertThat(listener1.seenEvents.contains(event1)).isTrue();
- assertThat(listener1.seenEvents.contains(event2)).isTrue();
- assertThat(listener1.seenEvents.contains(event3)).isTrue();
- assertThat(listener1.seenEvents.contains(event4)).isTrue();
+ assertThat(listener1.seenEvents).contains(event1, event2, event3, event4);
listener1.seenEvents.clear();
context.publishEvent(event1);
context.publishEvent(event2);
context.publishEvent(event3);
context.publishEvent(event4);
- assertThat(listener1.seenEvents.contains(event1)).isTrue();
- assertThat(listener1.seenEvents.contains(event2)).isTrue();
- assertThat(listener1.seenEvents.contains(event3)).isTrue();
- assertThat(listener1.seenEvents.contains(event4)).isTrue();
+ assertThat(listener1.seenEvents).contains(event1, event2, event3, event4);
AbstractApplicationEventMulticaster multicaster = context.getBean(AbstractApplicationEventMulticaster.class);
assertThat(multicaster.retrieverCache).hasSize(2);
@@ -314,10 +308,7 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
context.publishEvent("event2");
context.publishEvent("event3");
context.publishEvent("event4");
- assertThat(listener.seenPayloads.contains("event1")).isTrue();
- assertThat(listener.seenPayloads.contains("event2")).isTrue();
- assertThat(listener.seenPayloads.contains("event3")).isTrue();
- assertThat(listener.seenPayloads.contains("event4")).isTrue();
+ assertThat(listener.seenPayloads).contains("event1", "event2", "event3", "event4");
AbstractApplicationEventMulticaster multicaster = context.getBean(AbstractApplicationEventMulticaster.class);
assertThat(multicaster.retrieverCache).hasSize(2);
@@ -340,15 +331,13 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
MyOrderedListener1 listener1 = context.getBean("listener1", MyOrderedListener1.class);
MyEvent event1 = new MyEvent(context);
context.publishEvent(event1);
- assertThat(listener1.seenEvents.contains(event1)).isTrue();
+ assertThat(listener1.seenEvents).contains(event1);
- SimpleApplicationEventMulticaster multicaster = context.getBean(
- AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
- SimpleApplicationEventMulticaster.class);
- assertThat(multicaster.getApplicationListeners().isEmpty()).isFalse();
+ SimpleApplicationEventMulticaster multicaster = context.getBean(SimpleApplicationEventMulticaster.class);
+ assertThat(multicaster.getApplicationListeners()).isNotEmpty();
context.close();
- assertThat(multicaster.getApplicationListeners().isEmpty()).isTrue();
+ assertThat(multicaster.getApplicationListeners()).isEmpty();
}
@Test
@@ -367,20 +356,14 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
context.publishEvent(event3);
MyOtherEvent event4 = new MyOtherEvent(context);
context.publishEvent(event4);
- assertThat(MyNonSingletonListener.seenEvents.contains(event1)).isTrue();
- assertThat(MyNonSingletonListener.seenEvents.contains(event2)).isTrue();
- assertThat(MyNonSingletonListener.seenEvents.contains(event3)).isTrue();
- assertThat(MyNonSingletonListener.seenEvents.contains(event4)).isTrue();
+ assertThat(MyNonSingletonListener.seenEvents).contains(event1, event2, event3, event4);
MyNonSingletonListener.seenEvents.clear();
context.publishEvent(event1);
context.publishEvent(event2);
context.publishEvent(event3);
context.publishEvent(event4);
- assertThat(MyNonSingletonListener.seenEvents.contains(event1)).isTrue();
- assertThat(MyNonSingletonListener.seenEvents.contains(event2)).isTrue();
- assertThat(MyNonSingletonListener.seenEvents.contains(event3)).isTrue();
- assertThat(MyNonSingletonListener.seenEvents.contains(event4)).isTrue();
+ assertThat(MyNonSingletonListener.seenEvents).contains(event1, event2, event3, event4);
MyNonSingletonListener.seenEvents.clear();
AbstractApplicationEventMulticaster multicaster = context.getBean(AbstractApplicationEventMulticaster.class);
@@ -433,9 +416,7 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
context.publishEvent(new MyOtherEvent(context));
MyEvent event2 = new MyEvent(context);
context.publishEvent(event2);
- assertThat(seenEvents.size()).isSameAs(2);
- assertThat(seenEvents.contains(event1)).isTrue();
- assertThat(seenEvents.contains(event2)).isTrue();
+ assertThat(seenEvents).contains(event1, event2);
context.close();
}
@@ -453,9 +434,7 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
context.publishEvent(new MyOtherEvent(context));
MyEvent event2 = new MyEvent(context);
context.publishEvent(event2);
- assertThat(seenEvents.size()).isSameAs(2);
- assertThat(seenEvents.contains(event1)).isTrue();
- assertThat(seenEvents.contains(event2)).isTrue();
+ assertThat(seenEvents).contains(event1, event2);
context.close();
}
@@ -466,8 +445,7 @@ public class ApplicationContextEventTests extends AbstractApplicationEventListen
StaticApplicationContext context = new StaticApplicationContext();
SimpleApplicationEventMulticaster multicaster = new SimpleApplicationEventMulticaster();
multicaster.setErrorHandler(ReflectionUtils::rethrowRuntimeException);
- context.getBeanFactory().registerSingleton(
- StaticApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME, multicaster);
+ context.getBeanFactory().registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, multicaster);
ApplicationListener