Resolve ApplicationListener against BeanDefinition.getResolvableType()
This covers ApplicationListener generics in factory method return types in particular but also allows for programmatic setTargetType hints. Closes gh-23178
This commit is contained in:
@@ -52,6 +52,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.context.event.ContextClosedEvent;
|
||||
import org.springframework.context.event.ContextRefreshedEvent;
|
||||
import org.springframework.context.support.GenericApplicationContext;
|
||||
import org.springframework.tests.sample.beans.ITestBean;
|
||||
@@ -273,6 +274,18 @@ public class ConfigurationClassProcessingTests {
|
||||
assertThat(ctx.getBean(NestedTestBean.class).getCompany()).isEqualTo("functional");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configurationWithApplicationListener() {
|
||||
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
|
||||
ctx.register(ConfigWithApplicationListener.class);
|
||||
ctx.refresh();
|
||||
ConfigWithApplicationListener config = ctx.getBean(ConfigWithApplicationListener.class);
|
||||
assertThat(config.closed).isFalse();
|
||||
ctx.close();
|
||||
assertThat(config.closed).isTrue();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new {@link BeanFactory}, populates it with a {@link BeanDefinition}
|
||||
@@ -567,4 +580,16 @@ public class ConfigurationClassProcessingTests {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Configuration
|
||||
static class ConfigWithApplicationListener {
|
||||
|
||||
boolean closed = false;
|
||||
|
||||
@Bean
|
||||
public ApplicationListener<ContextClosedEvent> listener() {
|
||||
return (event -> this.closed = true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user