This project creates functional bean definitions from Spring Boot autoconfigurations. It’s really (surprisingly) fast.
To use it include the library on your classpath:
<dependency>
<groupId>org.springframework.boot.experimental</groupId>
<artifactId>spring-boot-auto-reflect</artifactId>
<version>1.0.0.BUILD-SNAPSHOT</version>
</dependency>
Create your Spring Boot application as an
ApplicationContextInitializer
and register beans in the initialize()
method, e.g.
@RestController
public class AutoApplication
implements ApplicationContextInitializer<GenericApplicationContext> {
@GetMapping
public String home() {
return "Hello";
}
@Override
public void initialize(GenericApplicationContext context) {
context.registerBean(AutoApplication.class, () -> this);
}
}
then use the custom SpringApplication
class from this library
instead of the default one to launch your app, as normal:
public static void main(String[] args) throws Exception {
SpringApplication.run(AutoApplication.class, args);
}
Instead of using an ApplicationContextInitializer
you can use the
regular @SpringBootApplication
and @Configuration
programming
model in your own classes, and set spring.functional.enabled=true
(e.g. as a System property). Be sure to use the custom
SpringApplication
class though if you do that.
For integration tests use the test context loader from this library. E.g:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = AutoApplication.class, loader = AutoTestContextLoader.class)
public class AutoApplicationTests {
@Autowired
private WebTestClient rest;
@Test
public void contextLoads() {
rest.get().uri("/").exchange().expectBody(String.class).isEqualTo("Hello");
}
}
Unsupported: test slices (@WebMvcTest
etc.) and @AutoConfigure*
annotations in tests.