Inspect bean class if it is available

Avoids instantiating beans if not necessary, and allows user to
provide Function as a @SpringBootApplication (for instance), or
more generally as a source to the application context (as opposed
to being component scanned).
This commit is contained in:
Dave Syer
2018-03-21 11:09:57 +00:00
parent 0bd71e61e0
commit a1b624b28a
3 changed files with 52 additions and 8 deletions

View File

@@ -123,6 +123,20 @@ public class ContextFunctionCatalogAutoConfigurationTests {
.isEqualTo(Foo.class);
}
@Test
public void configurationFunction() {
create(FunctionConfiguration.class);
assertThat(context.getBean("foos")).isInstanceOf(Function.class);
assertThat(catalog.<Function<?, ?>>lookup(Function.class, "foos"))
.isInstanceOf(Function.class);
assertThat(inspector.getInputType(catalog.lookup(Function.class, "foos")))
.isEqualTo(String.class);
assertThat(inspector.getOutputType(catalog.lookup(Function.class, "foos")))
.isEqualTo(Foo.class);
assertThat(inspector.getInputWrapper(catalog.lookup(Function.class, "foos")))
.isEqualTo(Flux.class);
}
@Test
public void dependencyInjection() {
create(DependencyInjectionConfiguration.class);
@@ -558,6 +572,22 @@ public class ContextFunctionCatalogAutoConfigurationTests {
}
}
@EnableAutoConfiguration
@Configuration("foos")
protected static class FunctionConfiguration
implements Function<Flux<String>, Flux<Foo>> {
@Override
public Flux<Foo> apply(Flux<String> flux) {
return flux.map(foo -> new Foo(value() + ": " + foo.toUpperCase()));
}
@Bean
public String value() {
return "Hello";
}
}
@EnableAutoConfiguration
@Configuration
@ComponentScan(basePackageClasses = FooConfiguration.class)