What's new
Deeper Spring (and JSR-330) compatibility, plus zero-config modules. Sprout now blends into a Spring Boot app with even less wiring — and stays framework-agnostic at its core.
Mix each framework's DI annotations — both ways
- A Sprout component works when wired with Spring's or JSR-330's
@Autowired/@Value/@Qualifier(andjakarta.inject.@Inject/@Named), right alongside Sprout's own. - A Spring-managed bean works when wired with Sprout's
@Autowired/@Value/@Qualifier/@PostConstruct(field injection +@PostConstruct; use Spring's@Autowiredfor constructor injection on a Spring bean). - Same-named annotations from either framework no longer clash.
Treat this as a compatibility net for mixed or migrating code — not a style. The recommendation stands: use Sprout's annotations in Sprout components, and each DI container's own annotations in its own beans. sprout-core never references Spring or the inject API; the starter contributes those equivalents through a DiAnnotationContributor SPI.
Zero-config module scanning
Framework modules now contribute their own packages to the component scan, so the sprout-openai / sprout-anthropic @Model executors are discovered the moment the jar is on the classpath — no sprout.scan.base-packages needed just to pick them up.
Monitoring activates on its own
Adding sprout-monitoring installs the in-memory usage store and subscribes the collector automatically (exposed as the Spring usageStore bean) — declare your own @UsageStore and it takes over. No package to scan or configure.
Full Changelog: v1.4.0...v1.5.0