Repository navigation
Features
The complete Explyt Spring feature list. For the headline summary, see the README; for the differentiator, see Native Context Mode. Visual gallery: Screenshots · Videos.
- Tool windows
- Bean detection & context analysis
- Spring Core & Boot enhancements
- Spring Web enhancements
- HTTP client
- Spring Debugger
- Spring Data support
- Spring AOP enhancements
- Inlay hints & Code Vision
- Code generation
- Spring Initializr
- Docker Compose & Kubernetes
- Quarkus support
- Spring AI
- MCP Server tools
- Kotlin support
- Additional inspections & features
- Explyt Spring — load real bean metadata, browse contexts, navigate beans, view aspects, and open Bean Analyzer. Entry point for native context mode.
- Explyt Endpoints — view and navigate endpoints for MVC/WebFlux, router functions, message brokers (Kafka/RabbitMQ listeners) and Spring Boot Actuator.
Walkthroughs and demos: Usage · Videos.
- Detects beans via annotations, factory methods, and conditional logic (
@Conditional, profiles, complex scans). - Follows a scan into a dependency module: when
scanBasePackageClasses(or a scan root) reaches a configuration in a module the application depends on, the components that configuration's own@ComponentScanadds are part of the application — for the autowiring inspection, the bean gutters, Search Everywhere and the MCP bean tools. Only scans of configurations the application itself reaches count; a library's own@SpringBootApplicationroot stays with that other application. -
Applications — a class annotated with
@SpringBootApplicationor with@EnableAutoConfiguration, directly or through a meta-annotation, is an application; an@EnableAutoConfigurationclass scans its package only when it also carries@ComponentScan. -
Profiles — the values of
@Profile({"a", "b"})are alternatives, as in Spring: a bean is active when any value matches, also across a direct@Profileand one from a meta-annotation, and an empty@Profile({})keeps the bean. A value is read by its constant value, so@Profile(Profiles.DEV)works; a value that cannot be evaluated keeps the bean rather than hiding it. Profiles added byspring.profiles.group.<name>are active whenever their group is. -
@ConditionalOnPropertyis evaluated the way Spring Boot evaluates it: every repeated annotation and every listed name must match,havingValueis compared ignoring case,falsedoes not match withouthavingValue,matchIfMissingapplies only to a missing key, and@ConditionalOnBooleanPropertyis evaluated too. The value comes from the configuration files — an active profile file over the default one, a multi-document file by itsspring.config.activate.on-profilesections,${VAR:default}by its default — and a value the IDE cannot resolve keeps the bean. -
Class conditions — Kotlin
@ConditionalOnClassclass literals and@ConditionalOnMissingClassnames are read from source like Java; a bean guarded by@ConditionalOnClass(Missing::class)is excluded when that class cannot resolve. -
Bean names —
@Bean(name = "x")names the beanx(the first of several names is the bean name, the rest are aliases), so@Qualifier("x")finds it; a@Beanmethod overridden in a subclass is one bean, not two. A composed@Beanannotation can name the bean through@AliasFor(annotation = Bean.class, attribute = "name")(or"value"): an explicit alias wins, and an empty alias falls back to the method name. Convention mapping of a same-namednameattribute applies only before Spring Framework 7 and only without an explicit alias; an unknown spring-core version uses explicit aliases only. -
Abstract components — an abstract class without a
@Lookupmethod and a non-static inner class are not beans, even when annotated as components; a component interface still is a candidate. An abstract component gets its own gutter icon listing the beans implementing it and the injection points of its type, and the usages gutter of a bean also lists injection points declared in its abstract base classes. - Native context mode eliminates many false positives by using real Spring logic.
- Supports projects with multiple application contexts.
- Autowiring/inspections also consider library beans (from dependencies), not only project sources.
See Native Context Mode for how this works.
Inspections & quick fixes
- Property key validations — unused properties, duplicate keys, and kebab-case convention checks.
-
@ConfigurationPropertiessupport — navigate, complete, and validate; nullable-parameter checks; empty/duplicate/invalid prefix detection; registration verification; smarter quick-fixes. -
Bean autowiring checks — no candidate found, ambiguous candidates, invalid
@Autowiredusage. -
Proxy method usage — warns about incorrect proxy-method use when
proxyBeanMethods = false. -
Resource reference validation — file/classpath references in annotations like
@Value. - AOP self-invocation — alerts when AOP-advised methods are called within the same class.
-
Meta-annotation retention — a custom annotation used as a Spring meta-annotation must be retained at runtime, or Spring never sees it ("Spring meta-annotation retention policy"). A Kotlin annotation class counts as runtime-retained with
@Retention(AnnotationRetention.RUNTIME)or with no@Retentionat all, the Kotlin default; one meta-annotated by another Kotlin annotation is checked through it, as in Java.
Completion & navigation
- Property files — relaxed binding and nested properties.
- Annotation attributes — e.g. package completion/navigation in
@ComponentScan; keys of@ConditionalOnPropertyand@ConditionalOnBooleanPropertycomplete, navigate and count as usages of the configuration key. - Bean methods — navigate from usage to definition across configuration classes.
- Query languages — JPQL plus basic SQL DML out of the box (no external plugin):
JdbcTemplate,@Query(nativeQuery = true),@NamedNativeQuery, inline strings, andJdbcClientparameter inspections.
Other
- XML configuration support in native context mode (no extra setup).
- Multi-context support, library beans DI, and SPI bean navigation/line markers.
- Search Everywhere Beans tab; Mark directory as Spring Application Property Folder.
- One-click converter between
.propertiesand.yml. -
Spellchecking in configuration files — in Spring
.ymland.propertiesfiles, the key segments the configuration model declares (a property, a group leading to properties, or a member reached below a list index) are not spellchecked, sospring.security.oauth2.resourceserveris not offered a "fix" that breaks the binding. Keys the application invents, and misspelled ones, still are; other YAML and properties files are untouched. -
YAML value types in configuration files — the bundled YAML check that compares the scalar types of one key across list items (
enabled: truenext toenabled: "${FLAG:false}") is suppressed in Spring configuration files, because Spring converts both to the declared type. Each value is still validated against its property type.
-
Endpoints tool window for Spring MVC, WebFlux, router functions, Kotlin
coRouter, message brokers (@KafkaListener,@RabbitListener) and Spring Boot Actuator — the project's@Endpointclasses and the built-inhealth,info,metricsand the rest, once per Spring Boot application. The annotated controllers of a WebFlux application are grouped under WebFlux; a classpath with both stacks runs, and is shown as, Spring MVC. An Actuator controller endpoint (@RestControllerEndpoint) lists each mapping method with its verbs, a project@EndpointWebExtensionadds its operations to the endpoint it extends, and an Actuator endpoint without operations is not listed, since Boot does not serve it. A route that answers any HTTP method — a controller's bare@RequestMapping, a Kotlinpath("/x", handler)route — is oneALLrow that every verb filter keeps; a verbless OpenFeign method is listed asGET. An Actuator endpoint thatmanagement.endpoints.web.exposuredoes not publish is still listed, in grey with not exposed over HTTP, and so is one the configuration grants no access to, with access none. Its search accepts a path or a URL pasted from a browser, a log line or a curl:/api/stores/42/ordersfinds/api/stores/{storeId}/orders, and the scheme, host, query, the declared base path and — failing that — a leading prefix only the deployment knows are ignored. -
Resolved mapping paths — a property placeholder in a Spring MVC or OpenFeign mapping (
@RequestMapping("${shop.receipts-path:/r}")) is resolved from the module's configuration, else from its default, for the tool window, Swagger UI, the generated OpenAPI and the MCP tools, and for URL navigation to controllers. JAX-RS@Pathand@HttpExchangepaths are shown as written, because Spring does not resolve them either without extra configuration. -
Mappings declared on an interface — a
@Controllerimplementing an interface (or extending a class) whose methods carry the request mappings serves them from its own override: the endpoint, its class-level prefix, the inherited parameter annotations (@PathVariable,@RequestParam,@RequestHeader,@RequestBody) andconsumes/producesare read as Spring reads them, and the Swagger and endpoint gutters sit on the override. A JAX-RS resource implementing an annotated interface, also one declared in another module, is listed under the resource class. -
Functional route prefixes — Kotlin router DSLs and Java builders use one predicate rule: literal
path("/a"), string receivers, verb predicates, and composedandpredicates contribute prefixes; path-freeaccept,contentType,headers,method/methods,all,param/queryParamand Spring 7versionkeep the inner path. An undecidable variable, helper,or,negateor unresolved condition hides only that nest, siblings remain listed, and one-argument verb predicates are not routes. Kotlin two-argumentpath("/x", handler)routes are listed for all HTTP methods, withnestprefixes applied; Java builder nested routes have noroutein the MCP trace. -
Inspections — duplicate endpoint detection; controller checks (missing
@PathVariable, unsupported signatures); OpenAPI validation (JSON/YAML,$refnavigation, version compatibility). Generate OpenAPI documentation reads and writes JSON and YAML, merges only missing operations into an existing path, preserves specification parameter names when template names differ, and leaves flow-style YAML or non-objectpathsuntouched. It is not offered for endpoints without an HTTP method. Controller bean name looks like a request path reports@RestController("/app"): the value is the bean name, so no prefix is added to the mappings, and on Spring MVC a request to exactly/appfails with HTTP 500. Its quick fixes move the value to a class-level@RequestMapping, or only remove the bean name when the class hierarchy already declares a type-level mapping. -
Completion & navigation — WebClient/WebTestClient, Router Functions (
RouterFunctions,coRouter), MockMvc multipart handling. A URL string in a MockMvc, WebClient or WebTestClient call navigates to its handler — a controller, a functional route or an Actuator endpoint — when it is relative, absolute against this machine (http://localhost:8080/api/orders) or written under the base path the application declares; a URL naming another host belongs to another service and stays unresolved. URL completion labels a route that answers any HTTP method[ALL]— a bare@RequestMappingor a Kotlin two-argumentpath("/x", handler)— and offers and resolves it inside any verb-specific call, such as MockMvcget("/x"),post("/x")orrequest(HttpMethod.PUT, "/x"), a WebClient or WebTestClient request, or an OpenAPI operation key such asget:; a route that lists its verbs is still matched by the exact verb, compared case-insensitively, sopost("/x")never reaches a@GetMapping("/x"). Navigate To Endpoint Usage on an endpoint's gutter lists the tests that call it: MockMvc requests to any host, and WebTestClient,java.net.http,RestTemplate,TestRestTemplateandRestClientrequests to this machine, with URLs built from templates, concatenation,URI.create(…)or aUriBuilderlambda (uri { it.path("/api/orders").build() }) — see test requests. -
Line markers for controller methods and router functions, and on the
@ReadOperation/@WriteOperation/@DeleteOperationmethods of a project@Endpoint, listing the test requests to that operation.
Two ways to test requests — Swagger UI from Spring annotations (Spring Web & OpenAPI REST client) and .http/.rest runners (Rest Client RFC 7230).
Spring context data, active transactions, and runtime property values right in the debugger. Full page: Spring Debugger.
- Repository method-name validation and autocomplete (prefixes like
findBy/countBy/existsBy, operators likeBetween/Like/In, sorting/limits likeOrderBy…Asc/Top/Distinct). - Return type and parameter checks; JPQL & SQL language injection; repository bean recognition.
-
Generate
equals/hashCodefor JPA entities — proxy-safe Hibernate approach (final, type check, non-null@Id). See Code Generations. - Spring Data 4.0 AOT navigation — jump from repository methods to AOT-generated artifacts and back.
- Line markers for aspects, pointcuts, and advice methods.
- Inspection for self-invocation of AOP-advised methods (
@Transactional,@Async).
-
@Profileinlay hints show the computed result of profile expressions (e.g."prod & !cloud"→true/false). -
@Scheduledcron completion + readable hints (including thezoneattribute). - Runtime property value Code Vision during Explyt debug sessions (see Spring Debugger).
From Code → Generate (Alt+Insert / ⌘N): Spring Web Method from URL/cURL, standalone java.net.http.HttpClient method, JPA equals/hashCode, OpenAPI generation, and Properties ↔ YAML conversion. Demos: Code Generations.
Create Spring Boot projects (Java/Kotlin) directly from IDEA Community with improved templates from start.spring.io, always up to date.
- Completion for Spring properties as environment variables in
docker-compose.yml(environment:) and Kubernetes manifests (env.name:). - Converts keys to
ENVIRONMENT_VARIABLE_FORM(e.g.server.port→SERVER_PORT). - Go-to-declaration jumps into
application.properties/application.yml.
-
CDI/DI — detect and navigate
@Inject, qualifiers, scopes, and producers (@Produces) both ways. - AOP — interceptors and decorators with gutter markers and navigation.
- Web (JAX-RS) — Endpoints tool window for REST resources, navigation to handlers, duplicate-path checks, and a Swagger UI–based HTTP client.
- Works by static analysis — most features are available just by opening a Quarkus project, no app run required.
Optional integration with the Explyt AI platform for Spring tasks inside the IDE. AI-augmented actions (when the Explyt AI plugin is installed): DB schema → JPA entity, entity ↔ DTO, controller ↔ OpenAPI round-trips, Spring config generators (Kafka/Security), curl/Postman → .http, and Properties ↔ YAML. Works with OpenAI-compatible providers or local models; requires IntelliJ Platform 2025.1+. Full page: Explyt AI Actions.
8 Spring-aware MCP tools for agentic AI clients on the bundled JetBrains MCP Server (IDEA 2025.2+). Full reference: MCP Tools.
- Spring-specific handling of the
internalmodifier and constructor validations. - Warns against using an
objectas a Spring@Component(with a convert-to-class quick-fix). - Alerts when
internalbean methods need explicit bean names (JVM name mangling). - Kotlin
coRouter/ Router Function endpoints and Kotlin code generation. - Kotlin
suspendhandlers are read through their declaration — the declared response type instead ofObject, no coroutine continuation among the parameters — in the gutter, Swagger UI, the generated OpenAPI and the MCP tools (details).
-
Configuration metadata — completion/validation in
additional-spring-configuration-metadata.jsonand schema support. -
Profile validation — checks
@Profilefor errors, empty profiles, and operator misuse. -
Async return type —
@Asyncmethods must returnvoidor aFutureinheritor. - Cache annotations — reports incorrect usage on interfaces; suggests classes/methods.
- Dependency Analyzer — analyze and navigate bean relationships.
- Experimental Scala support — create and develop projects using Scala.
See also: Native Context Mode · Spring Debugger · MCP Tools · Usage
Home · Features · Installation · Usage · Marketplace · Issues · Telegram (EN)
Explyt Spring Plugin — free for commercial and non-commercial use under the Apache License 2.0.
Getting started
Features
- All features
- Native Context Mode
- Spring Debugger
- HTTP Client
- Spring Web & OpenAPI REST client
.http/.restfiles (RFC 7230)- Code Generations
- MCP Tools
- Explyt AI Actions
Gallery
Links