Support matrix¶
| Feature | Status |
|---|---|
@Component, @Service, @Repository, @Controller, @RestController (direct) |
Supported |
| Constructor injection, exactly one non-private constructor | Supported |
| Concrete and non-generic interface resolution | Supported |
Singleton scope (default, or @Scope("singleton")) |
Supported |
| Missing / ambiguous / eager constructor cycle | Supported (SG001 / SG007 / SG003) |
| Declared runtime boundaries | Supported (report only); typos, stale and shadowed declarations reported as SG009 |
Spring Data repository interfaces (extend Repository, not @NoRepositoryBean) |
Recognized, reported as "created at runtime", never counted as validated |
@Value constructor parameters |
Recognized as property values, not bean dependencies |
| Other scopes | SG004, component excluded |
| Zero or multiple constructors | SG005, component excluded |
Generics, collections, Optional, Provider, @Lazy |
SG006, dependency not validated |
@Qualifier("name") on a constructor parameter |
Supported since 0.1.0-rc.3. A candidate matches by its class-level @Qualifier value (also inherited from a superclass) or by its bean name, as in Spring |
@Qualifier without a value; @Named or custom qualifier annotations on a parameter |
SG008, dependency not validated |
@Qualifier when a candidate is named by @Named / @ManagedBean or has a custom qualifier |
SG008, dependency not validated |
Several candidates match the same @Qualifier |
SG006: Spring then chooses by bean name, which is not modelled |
@Primary |
Supported since 0.1.0-rc.3: a unique @Primary candidate is validated; several are SG007. Also via meta-annotation |
@Fallback (Spring 6.2+) |
Supported since 0.1.0-rc.3: without @Primary, a unique non-@Fallback candidate is validated |
| A component that requests its own type (decorator pattern) | Supported since 0.1.0-rc.3: it is not its own candidate unless nothing else matches, as in Spring |
@Priority among several remaining candidates |
SG006, dependency not validated |
| Several candidates, parameter name equals one bean name | SG006: Spring's name fallback needs -parameters, which the processor cannot see |
Lombok-generated constructors (@RequiredArgsConstructor, @AllArgsConstructor) |
Supported, any processor order (Maven checked; see maven-lombok.md) |
Maven annotationProcessorPaths |
Supported (plain Maven 3.8.8 checked) |
@Profile / @Conditional* components (also via meta-annotation) |
Kept in the graph and their own dependencies are checked, but never used to resolve a dependency. A dependency with conditional candidates is SG006 unless its type is declared a runtime boundary. |
@Configuration / @Bean |
Not interpreted; listed as excluded in the report |
| Composed stereotypes, field/method injection, conditions, profiles, multi-module, Kotlin | Not supported |
In advisory mode every diagnostic is a warning; in strict mode every diagnostic is an error.