Add support for explicit generic type in PayloadApplicationEvent

See gh-24599
This commit is contained in:
陈其苗
2020-02-26 18:57:35 +08:00
committed by Stephane Nicoll
parent 7794606305
commit 6283456ef2
3 changed files with 57 additions and 2 deletions

View File

@@ -60,6 +60,7 @@ import org.springframework.context.event.test.GenericEventPojo;
import org.springframework.context.event.test.Identifiable;
import org.springframework.context.event.test.TestEvent;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.ResolvableType;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;
@@ -622,6 +623,17 @@ class AnnotationDrivenEventListenerTests {
this.eventCollector.assertNoEventReceived(listener);
this.eventCollector.assertTotalEventsCount(0);
}
@Test
public void publishEventWithGeneric() throws NoSuchMethodException {
MyAnnotationConfigApplicationContext ctx = new MyAnnotationConfigApplicationContext();
context = ctx;
ctx.register(MyEventWithGenericListener.class);
ctx.refresh();
ResolvableType resolvableType = ResolvableType.forMethodParameter(MyEventWithGenericListener.class.getMethod("onMyEventWithGeneric",MyEventWithGeneric.class),0);
ctx.publishEvent(new MyEventWithGeneric<String>(),resolvableType);
assertThat(MyEventWithGenericListener.count).isEqualTo(1);
}
@Test
void orderedListeners() {
@@ -1134,4 +1146,29 @@ class AnnotationDrivenEventListenerTests {
}
}
public static class MyAnnotationConfigApplicationContext extends AnnotationConfigApplicationContext{
@Override
public void publishEvent(Object event, ResolvableType eventType) {
super.publishEvent(event, eventType);
}
}
public static class MyEventWithGeneric<T> {
}
@Component
public static class MyEventWithGenericListener{
public static int count ;
@EventListener
public void onMyEventWithGeneric(MyEventWithGeneric<String> event){
count ++;
}
}
}